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

前端之家收集整理的这篇文章主要介绍了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

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

Service Lifecycle它说:

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标志将为您的服务提供更高的权限,但不足以使其保持不可销毁.其他服务将首先被杀死,如果仍然需要资源,您的特权服务也将被杀死.

猜你在找的Android相关文章