Android进程生命周期与服务

Android进程生命周期与服务,android,android-lifecycle,Android,Android Lifecycle,在我注意到android意外终止我的应用程序后,我一直在阅读有关进程生命周期的文章。该应用程序通常也在后台运行,但现在已被终止。该应用程序监听gps位置更新、电池状态广播、接收短信广播、运行蓝牙和tcp服务器等。因此,它有很多工作要做,直到现在它已经取得了相当好的成功 我发现android可能因为内存不足而关闭了进程。我的应用程序仍在“应用程序交换”列表中,但当我选择它时,我注意到它实际上已重新启动,这解释了我之前无法使用tcp连接它的事实。您是否同意我的结论,或者除了内存不足之外,还有其他原因

在我注意到android意外终止我的应用程序后,我一直在阅读有关进程生命周期的文章。该应用程序通常也在后台运行,但现在已被终止。该应用程序监听gps位置更新、电池状态广播、接收短信广播、运行蓝牙和tcp服务器等。因此,它有很多工作要做,直到现在它已经取得了相当好的成功

我发现android可能因为内存不足而关闭了进程。我的应用程序仍在“应用程序交换”列表中,但当我选择它时,我注意到它实际上已重新启动,这解释了我之前无法使用tcp连接它的事实。您是否同意我的结论,或者除了内存不足之外,还有其他原因导致这种情况

在阅读了更多的内容之后,我明白了我应该将整个应用程序作为前台服务来实现,因为只有在没有正常的活动可以杀死的情况下,这些应用程序才会被杀死。然而,在这一点上,我对应用程序做这样一点修改并不感到舒服。但是,后来我发现:

重要性层次结构中有五个级别。下表按重要性顺序列出了不同类型的流程第一个流程最重要,最后终止:

前景进程

用户当前正在执行的操作所需的进程。如果满足以下任一条件,则流程被视为处于前景:

-它承载用户正在与已调用的活动的onResume方法交互的活动

-它承载一个绑定到用户与之交互的活动的服务

-它承载一个在前台运行的服务,该服务称为startForeground

-它承载的服务正在执行其生命周期回调onCreate、onStart或onDestroy中的一个

-它承载一个正在执行onReceive方法的BroadcastReceiver

如果粗体条件错误,请更正。这难道不意味着我可以让我的应用程序托管一个虚拟前台服务,之后运行我的应用程序和虚拟服务的进程将被视为前台进程,这也意味着它将与Android杀死我的应用程序的情况非常不同吗??这样,我就不必经历我的应用程序所具有的所有功能,也不必弄明白如何让它们作为一项服务工作


谢谢

请注意,即使前台服务也可能被操作系统终止,因此您仍然必须实现服务的生命周期。我知道,但我知道这是不太可能的。无论如何,是否有更好的解决方案,即是否有某种机制来完全防止这种情况发生,或者有其他解决办法?你同意我上面的建议吗?你的解决方案是最好的选择,你的前台服务是最后一个在RAM战场上被杀的士兵