Android 使用前台服务是否可以保护整个进程不被终止?

Android 使用前台服务是否可以保护整个进程不被终止?,android,android-service,Android,Android Service,前台服务是否能保护整个流程?文档有点不清楚,说这项服务不太可能被终止。但是,我了解到,被销毁的服务(或活动)与被终止的流程(包含所有活动和服务,除非您特别强制您的服务位于不同的流程中)之间有很大的不同 有什么想法吗 谢谢。首先,没有什么可以阻止进程被终止,不幸的是,您对此无能为力。Android使用Linux的“内存不足”进程杀手的一种改进形式定期杀死进程。内存甚至不必太低,任务就可以被终止——它可能只是运行了太长时间。如果你是root用户,你可以摆弄各种各样的文件(在/sys或/proc下,我

前台服务是否能保护整个流程?文档有点不清楚,说这项服务不太可能被终止。但是,我了解到,被销毁的服务(或活动)与被终止的流程(包含所有活动和服务,除非您特别强制您的服务位于不同的流程中)之间有很大的不同

有什么想法吗


谢谢。

首先,没有什么可以阻止进程被终止,不幸的是,您对此无能为力。Android使用Linux的“内存不足”进程杀手的一种改进形式定期杀死进程。内存甚至不必太低,任务就可以被终止——它可能只是运行了太长时间。如果你是root用户,你可以摆弄各种各样的文件(在/sys或/proc下,我已经有一段时间没有看到这个了),以对抗Android并试图阻止进程被杀死,但是除非你非常快速地(每秒几次)触摸这些文件,否则Android仍然可能在不合适的时候杀死你的进程

拥有一个前台服务不会改变这一切,它只会把你的进程提升到一个更高的优先级,这样Android就更有可能先杀死其他东西。但取决于你在做什么,它可能仍然没有什么效果。例如,我有一个我编写的logger应用程序,它在运行时占用12-15MB(非共享)内存,如果我切换到(内存不足的)Firefox并做很多事情,它在具有512MB RAM的设备上仍然会被杀死。请注意,您可以做一些事情来从中恢复,例如,告诉AlarmManager定期向您发送意图,如果您的服务被终止,将会重新启动它。然而,这将增加电池的使用量


现在,关于服务本身和活动类,Android可以很好地在调用onPause后对您的活动进行垃圾收集,而不会终止进程。例如,在这种情况下,如果您的服务类中有一个指向活动的指针,您会发现它突然为空,因此,如果您以这种方式引用活动,您应该在尝试调用活动的非静态成员之前始终测试空指针。

简短回答:否,如果有足够的权限,用户可以做任何事情。谢谢,这很有用。唯一让我怀疑的是,一项活动可以在暂停后进行GCD,原因有几个。在honeycomb之后的活动可终止之前,您一定会得到一个onStop调用(如果合适的话,onSaveInstance也会在onPause和onStop之前调用,这样也会失败)。更重要的是,尽管一项活动在onPause之后仍然可见,所以我不确定如何进行GCD。剩下的非常有用,谢谢。指针突然变为空也没有意义,GC不是这样工作的。我可能会阻止使用这样的指针收集活动,尽管它可能已被破坏(发生了多少内存泄漏)。通常情况下,除非进程本身被终止(在这种情况下,单例和静态变量都被重新初始化,在这种情况下,您将得到null),否则简单的活动破坏不应该导致这种情况。至少我不知道怎么做。不过我还是会将活动onDestroy的静态引用调零,以避免进一步压缩内存,而且由于其他原因,这是不安全的。@Creos是的,我不确定如何解释空指针,这只是根据我的经验。我不确定GC是否是一个正确的词,你是对的,真正的GC将被期望做与正在发生的事情相反的事情。