在我注意到android意外终止我的应用程序之后,我一直在阅读关于进程生命周期的内容。该应用程序通常也在后台运行,但现在终止了。该应用程序侦听gps位置更新,电池状态广播,接收短信广播,运行蓝牙和TCP服务器等。所以它有很多工作要做,直到现在它已经成功。
我发现,由于RAM较低,android可能会关闭进程。我的应用程序仍在“app swap”列表中,但是当我选择它时,我注意到它实际上已重新启动,这解释了我之前无法使用tcp连接它的事实。你是否同意我的结论,还是有任何其他原因而不是可能造成这种情况的低RAM?
在阅读了一点之后,我明白我应该将整个应用程序实现为前台服务,因为只有在没有正常的活动可以杀死之后才会被杀死。但是,此时我对应用程序进行这样的改动并不是那么舒服。但是,我发现了这个:
http://developer.android.com/guide/components/processes-and-threads.html
重要性层次结构中有五个级别。以下列表按重要性顺序列出了不同类型的流程(第一个流程最重要,最后被杀死):
前景流程
用户当前正在执行的操作所需的过程。如果满足以下任一条件,则认为进程处于前台:
- 它托管用户正在与之交互的Activity(已调用Activity的onResume()方法)。
- 托管与用户正在与之交互的活动绑定的服务。
- 托管一个“在前台”运行的服务 - 该服务调用了startForeground()。
- 托管正在执行其生命周期回调之一的服务(onCreate(),onStart()或onDestroy())。
- 它主持一个正在执行其onReceive()方法的BroadcastReceiver。
如果我的粗体条件错误,请更正。这不是说我可以让我的应用程序托管虚拟前台服务,之后运行我的应用程序和虚拟服务的进程将被视为前台进程,这再次意味着它将与Android杀死我的应用程序非常不同??这样我就不必完成我的应用程序的所有功能,并弄清楚如何让它们作为服务工作。
谢谢!