2013-04-23 53 views
0

我正在开发一个在BOOT_COMPLETED上启动服务的android应用程序。一切工作正常,但在记录一些消息时,我注意到,在我终止应用程序后,它立即从一分钟到一分钟后再次启动。Android BOOT COMPLETED频繁发射

可以启动服务的唯一接收者注册到BOOT_COMPLETED。所以我的问题是,为什么我的应用程序在电话已启动已启动之后自行启动。

从Android网站:

广播事件:这是一次播出,该系统已完成启动后。它可以用于执行特定于应用程序的初始化,例如安装警报。您必须持有RECEIVE_BOOT_COMPLETED权限才能接收此广播。

据我了解,这个活动应该只播放一次,那么还有什么可能导致这个事件。

编辑:这是我在我的BootReceiver(扩展BroadCastReceiver)中使用的代码来启动服务。此代码不会重复任何地方其他。

Intent serviceIntent = new Intent(context, RandomToneService.class); 
context.startService(serviceIntent); 
+0

你如何“杀死应用程序”? 'onStartCommand()'在你的'Service'中返回什么? – CommonsWare 2013-04-23 18:12:54

+0

我通过滑动屏幕或使用高级任务杀手应用程序来终止应用程序 – 2013-04-23 18:13:35

+0

'onStartCommand()'在“Service”中返回什么? – CommonsWare 2013-04-23 18:14:41

回答

1

要检查我应该重写它并记录呢?

不一定,但你需要阅读约services and their lifecycle

通过将应用程序从最近的任务列表中删除,您所做的与Android在由于内存不足而终止时会执行的操作相同。 A Service可以向Android请求在这些情况下自动重新启动,并且这是通过onStartCommand()的返回值完成的。

ServiceonStartCommand()的默认返回值是START_STICKY,它告诉Android稍后有内存时重新启动服务。 IntentService上的onStartCommand()的默认返回值为START_NOT_STICKYSTART_REDELIVER_INTENT,具体取决于您是否调用setIntentRedelivery()以及您在那里提供的内容。

因此,如果你希望为您服务,在这些条件下自动重新启动,你需要做一些事来报复onStartCommand()返回START_NOT_STICKY,无论是:在你的IntentService

  • 呼叫setIntentRedelivery(false),或

  • 覆盖onStartCommand(),链接到超类的默认行为,但随后返回START_NOT_STICKY

+0

非常感谢,这完美地回答了我的问题。 – 2013-04-23 18:24:42