0

我正在开发一个在 BOOT_COMPLETED 上启动服务的 android 应用程序。一切正常,但是在记录一些消息时,我注意到在我终止应用程序后,它会立即重新启动到一分钟后。

唯一可以启动服务的接收器注册到 BOOT_COMPLETED。所以我的问题是为什么我的应用程序在手机启动后自行启动

从安卓网站:

广播动作:在系统完成启动后广播一次。它可用于执行特定于应用程序的初始化,例如安装警报。您必须拥有 RECEIVE_BOOT_COMPLETED 权限才能接收此广播。

据我了解,这个事件应该只广播一次,所以还有什么可能导致这个事件。

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

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

1 回答 1

1

要检查我应该覆盖它并记录它吗?

不一定,但您需要了解服务及其生命周期

通过从最近的任务列表中删除应用程序所做的事情与当您的进程因内存不足而终止时 Android 所做的事情相同。AService可以向 Android 请求在这些情况下自动重启,这是通过 from 的返回值完成的onStartCommand()

a的默认返回值onStartCommand()是,它告诉 Android 稍后在有内存时重新启动您的服务。on an的默认返回值是or ,具体取决于您是否调用以及您在此处提供的内容。ServiceSTART_STICKYonStartCommand()IntentServiceSTART_NOT_STICKYSTART_REDELIVER_INTENTsetIntentRedelivery()

因此,如果您希望您的服务在这些情况下自动重新启动,您需要做一些事情onStartCommand()来返回START_NOT_STICKY,或者:

  • 致电setIntentRedelivery(false)您的IntentService, 或

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

于 2013-04-23T18:23:25.387 回答