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

但是,如果我将应用程序保留在“最新”应用程序中,则上述所有方法都可以正常工作。我将其滑开的那一刻不起作用。

关于如何实现此目标的任何想法?

我在诸如Whatsapp,Facebook等的某些应用程序中看到过。即使在滑动后,仍有后台服务在运行,以监听新的通知等。
如何使用我的应用程序实现?

最佳答案

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


  如果此服务的进程在启动时被杀死(之后
  从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);
        }

    };
}

10-07 19:31
查看更多