Android应用在后台运行的时候很容易被强杀,尤其是在国内XX助手、XX管家、XX大师之类的应用大行其道之下。如果我们开发的应用没有被用户加入白名单,很大程度上会被系统因为内存不足或者用户主动给应用在后台运行的时候杀掉。这个时候问题就来了:
- 如何保证我们的应用在被强杀之后用户再次回到应用来保证应用的稳定性而不Crash?
为了说明上述问题,我们来简单模拟这样一个过程:
APP –> ActivityA –> ActivityB –>ActivityC –> Pressed Home
假设APP在Activity C页面用户按下Home
键应用退到后台运行。这个时候启动DDMS,选中该APP的进程,Kill。然后我们从运行APP历史列表中选中该APP并将其置于前台,这个时候回到该应用的界面还是Activity C。再点击返回按钮回到ActivityB,在某些性能比较差一点的机器上可能会出现短暂的黑屏然后才会显示出ActivityB。这是因为该Activity实例其实在Kill该APP进程的时候已经被销毁了,但是Android系统虽然销毁了Activity实例,却并没有销毁该APP的Activity栈。因此我们点击返回按钮还是会回到ActivityB。但是需要重新构建该ActivityB的实例。
这样看貌似并没有什么问题,然而事情并不会这么简单(废话,不然我写这篇博客干嘛。。),如果ActivityB中引用了静态变量并尝试获取其值的时候,这个时候是会出现NPE的。