如何在应用被杀死时保持服务而不是重启?

时间:2017-04-05 17:32:58

标签: android android-service

我正在使用像计数器(0 - 10)之类的服务来测试服务,但是当应用程序被杀死时,服务已重新启动而是继续。

在logcat中显示:

04-05 17:25:47.497 25309-25309/? I/livro: onCreate
04-05 17:25:47.498 25309-25309/? I/livro: onStartCommand
04-05 17:25:48.531 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...0
04-05 17:25:49.571 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...1
04-05 17:25:50.611 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...2
04-05 17:25:51.651 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...3
04-05 17:25:52.692 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...4
04-05 17:25:53.733 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...5
04-05 17:25:54.771 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...6
04-05 17:25:55.811 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...7
04-05 17:25:56.851 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...8
04-05 17:25:57.891 25309-25325/com.example.augustoc.helloservice I/livro: HelloService executando...9
04-05 17:25:57.891 25309-25309/com.example.augustoc.helloservice I/livro: onDestroy

当关闭应用程序时,计数器已重新启动,但我希望该服务继续。

在onStartCommand中:

@Override                                               // ID DESTE SERVIÇO
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG,"onStartCommand");
        count = 0;
        running = true;

        //delega para a trhead
        new WorkerThread().start();
        return START_STICKY;
    }

我尝试返回START_STICKY和START_NOT_STICKY,两者都不起作用。

1 个答案:

答案 0 :(得分:1)

在创建服务时使用此常量。用return START_STICKY;替换return START_REDELIVER_INTENT添加必要的逻辑。 START_REDELIVER_INTENT 如果系统在onStartCommand()返回后终止服务,则重新创建服务并使用传递给服务的最后一个意图调用onStartCommand()。任何待处理的意图依次交付。这适用于主动执行应立即恢复的作业的服务。

另外请考虑使用JobScheduler,您将构造这些JobInfo对象并使用schedule(JobInfo)将它们传递给JobScheduler。当满足声明的条件时,系统将在您的应用程序的JobService上执行此作业。使用JobInfo.Builder(int,android.content.ComponentName)创建JobInfo时,可以确定哪个JobService用于执行作业的逻辑。

该框架将在您收到回调时智能化,并尝试尽可能地批量处理它们。通常,如果您未在作业上指定截止日期,则可以随时运行,具体取决于JobScheduler内部队列的当前状态,但是只要下次设备连接到电源,它可能会延迟源。