如何在最近活动扫除Android服务后在后台运行该服务



我有一个应该始终运行的后台服务。它应该等待传入的电子邮件,当电子邮件到达(到我的旧手机)时,它将触发一个操作。 (向我的新手机发送短信)。不是一个聪明的用户案例,而只是学习安卓。

但是,如果我将应用程序保留在"最近"应用程序中,上述所有内容都可以正常工作。当我刷掉它的那一刻,它不起作用。

关于我如何实现这一目标的任何想法?

我在Whatsapp,Facebook等一些应用程序中看到,即使在我们滑动后,也会有一个后台服务运行来收听新的通知等。如何使用我的应用程序实现?

为此,您需要使服务粘性返回START_STICKY服务的 onStartCommand。 在文档中,如果进程被杀死,系统将再次重新创建

如果此服务的进程在启动时被终止(之后 从onStartCommand(Intent, int, int)返回),然后将其保留在 已启动状态,但不保留此交付意向。后来的系统 将尝试重新创建服务。因为它处于启动状态, 它将保证在之后调用onStartCommand(Intent,int,int) 创建新的服务实例;如果没有任何挂起的开始 要传递到服务的命令,将使用 null 调用 意图对象,因此您必须注意检查这一点。

public class MyService extends Service {
    /*
     * (non-Javadoc)
     * 
     * @see android.app.Service#onBind(android.content.Intent)
     */
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        handler.postDelayed(run, 1000);
        return Service.START_STICKY;
    }
    private Runnable run = new Runnable() {
        @Override
        public void run() {
            handler.removeCallbacks(run);
            handler.sendEmptyMessage(0);
        }
    };
    private Handler handler = new Handler() {
        /*
         * (non-Javadoc)
         * 
         * @see android.os.Handler#handleMessage(android.os.Message)
         */
        @Override
        public void handleMessage(Message msg) {
            Log.e("handleMessage", "" + System.currentTimeMillis());
            handler.postAtTime(run, 1000);
        }
    };
}

为此创建粘性服务:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

START_STICKY如果此服务的进程在启动时被终止(从 onStartCommand(Intent, int, int)返回后),则将其保留为已启动状态,但不保留此传递的意图。稍后,系统将尝试重新创建服务。因为它处于启动状态,所以它会保证在创建新的服务实例后调用 onStartCommand(Intent, int, int);如果没有要传递到服务的挂起启动命令,则将使用 null 意图对象调用它。

最新更新