前台服务是否对整个过程有保护作用?文档有点不清楚,说该服务极不可能被杀死。但是,我已经了解到,正在销毁的服务(或活动)与流程(包含所有活动和服务)之间存在很大差异,除非您特别强制您的服务处于不同的流程中被杀。
有什么想法吗?
感谢。
答案 0 :(得分:2)
首先,没有任何东西可以防止一个进程被杀死,不幸的是,你无法做到这一点。 Android使用修改后的Linux“内存不足”进程杀手来定期杀死进程。对于要杀死的任务,内存甚至不必很低 - 它可能只是运行了太长时间。如果你是root用户,你可以摆弄各种文件(在/ sys或/ proc下,我已经看了一段时间已经有一段时间了)为了对抗Android并尝试防止一个进程被杀,但除非你触摸这些文件非常迅速(几秒钟)Android仍然可能在不合时宜的时候杀死你的进程。
拥有前台服务不会改变任何这一点,它只会将你的进程提升到更高的优先级,因此Android更有可能先杀掉其他东西。但取决于你正在做什么,它可能仍然没有什么影响。例如,我有一个记录器应用程序,我写的在运行时需要12-15MB(非共享)内存,并且当它被预设时,如果我切换到(内存饥饿)Firefox并且仍然会在具有512MB RAM的设备上被杀死做了很多事。请注意,您可以采取一些措施从中恢复,例如,告诉AlarmManager定期向您发送一个意图,如果您的服务被终止将重新启动它。但是,这会增加电池的使用量。
现在关于服务本身与Activity类,Android可以在调用onPause之后垃圾收集你的Activity而不会杀死进程。在这种情况下,例如,如果你有一个指向你的Service类的Activity的指针,你会发现它突然变为null,所以如果你以这种方式引用你的Activity,你应该在尝试之前测试一个空指针。调用您的Activity的非静态成员。