我正在使用像计数器(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,两者都不起作用。
答案 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内部队列的当前状态,但是只要下次设备连接到电源,它可能会延迟源。