Android系统是如何确定进程优先级的高低的呢?
如果一个app正在与用户交互,那么它所在的进程具有最高优先级;其次,如果一个app是可见的,例如被一个对话框部分遮挡,它所在进程具有第二高的优先级;再次,如果app当前是不可见的,也就是被切换到了后台,则它所在进程具有第三高的优先级;
这里要补充一点,如果这个后台app启动了一个service,则它比一般的后台app优先级高一些。最后,如果一个进程里没有包含任何app,这个进程的优先级是最低的。当系统资源严重不足时,任何一个进程都有可能被杀掉,而当用户想回到一个已经不存在于内存中的Activity时,系统只得新建一个这样的Activity对象并调用它的onCreate()方法进行恢复。
所以有时出现这种状况:一个app大部分时间运行很好,偶尔在切换Activity时出现空指针异常导致强制关闭,这多半是在onCreate()方法里使用了已经被重置为空的对象(例如intent里的变量)造成的。即使不出现异常,也会造成表单数据丢失等严重影响使用体验的问题。
要解决这类问题,切不可抱“现在手机内存大,进程一般不会被杀掉”这种侥幸心理,而应该以“应用随时都会被杀掉”的态度来谨慎处理。
下面介绍Google建议的方式:
解决方法由于Activity随时可能需要重建,所以我们要做的事情就是在适当的位置将Activity所需数据进行持久化(从ram复制到rom或sd卡),并在onCreate()方法里利用这些数据恢复现场。
Activity有两类数据需要进行持久化处理