在我的带有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
不幸的是,其中一个被杀死的进程是我的远程服务,它有一个运行的应用程序绑定它.实际上,服务会立即重新启动,但这会导致我的应用程序出现不一致的行为.
A service can be both started and have connections bound to it. In
such a case,the system will keep the service running as long as
either it is started or there are one or more connections to it with
the Context.BIND_AUTO_CREATE flag.
我的应用程序使用Context.BIND_AUTO_CREATE绑定到远程服务,因此我认为只要主进程绑定到远程服务,远程服务就会保持不变.如何让Android不杀死远程服务?
注意:赏金用于解释为什么代码根据文档似乎不起作用.
解决方法
请在这里阅读Joel F的答案:
How it is possible Service run indefinitely and also allow binding in android?
如上所述,如果真的需要资源,保持服务不可攻击的唯一方法是使用前台服务http://developer.android.com/guide/components/services.html#Foreground
文档也写得错误,因为引用:“系统将保持服务运行,只要它启动或有一个或多个连接到它”在100%的情况下是不正确的. Context.BIND_AUTO_CREATE标志将为您的服务提供更高的权限,但不足以使其保持不可销毁.其他服务将首先被杀死,如果仍然需要资源,您的特权服务也将被杀死.