远程服务在主进程绑定时被杀死

gno*_*bal 6 service android

在我的带有Jelly Bean 4.1.1(官方)的Galaxy Nexus上,有时操作系统会进行杀戮狂欢,并且日志中包含以下类型的条目:

10-02 22:24:34.992 I/ActivityManager(  306): Killing 7517:com.google.android.apps.reader/u0a77: remove task
10-02 22:24:36.484 I/ActivityManager(  306): Killing 7465:com.tf.thinkdroid.sg:writedroid/u0a50: remove task
10-02 22:24:37.273 I/ActivityManager(  306): Killing 5924:com.metago.astro/u0a73: remove task
10-02 22:24:37.296 W/ActivityManager(  306): Scheduling restart of crashed service com.metago.astro/.jobs.JobService in 5000ms
10-02 22:24:37.656 I/ActivityManager(  306): Killing 7302:org.jtb.alogcat/u0a84: remove task
10-02 22:24:38.148 I/ActivityManager(  306): Killing 7120:com.google.android.gm/u0a19: remove task
Run Code Online (Sandbox Code Playgroud)

不幸的是,其中一个被杀死的进程是我的远程服务,它有一个运行的应用程序绑定它.实际上,服务会立即重新启动,但这会导致我的应用程序出现不一致的行为.

服务生命周期中,它说:

服务既可以启动,也可以绑定连接.在这种情况下,只要系统启动或者使用Context.BIND_AUTO_CREATE标志有一个或多个连接,系统就会保持服务运行.

我的应用程序绑定到远程服务,Context.BIND_AUTO_CREATE所以我的印象是,只要主进程绑定到它,远程服务就会保持不变.如何让Android不杀死远程服务?

注意:赏金用于解释为什么代码根据文档似乎不起作用.

Mil*_*vic 4

请阅读 Joel F 的回答:服务如何无限期运行并允许在 android 中绑定?

如前所述,如果确实需要资源,保持服务不可杀死的唯一方法是使用前台服务http://developer.android.com/guide/components/services.html#Foreground

该文档也写错了,因为引用:“只要服务启动或有一个或多个连接,系统就会保持服务运行”在 100% 的情况下并不正确。Context.BIND_AUTO_CREATE 标志将为您的服务提供更高的权限,但不足以使其无法被杀死。其他服务将首先被杀死,如果仍然需要资源,您的特权服务也将被杀死。