Android 恢复Activity现场

首先说两个Activity的函数:onSaveInstanceState和onRestoreInstanceState。

经过测试函数onSaveInstanceState并不是像文档里说的,是在内存不够时,系统要强制杀掉这个Activity时,进行调用的。在这几钟情况下会被调用:

1.当用户按下HOME键时。 

2.从任务管理器切换其他应用的时候

3.关闭屏幕的时候

4.跳转到另一个Activity的时候

5.横竖屏切换的时候

如果执行了finish()方法onSaveInstanceState就不会执行了,比如按返回键。

总结onSaveInstanceState调用的条件是当一个Activity变得容易被系统销毁的时候(肯定还没有销毁)会被执行;主动的销毁Activity此函数不会执行。

onRestoreInstanceState函数在Activity“未经许可”情况下被销毁而后系统又重新创建此Activity的时候会被调用(是系统重新打开此Activty而非人为通过Intent打开),比如应用切到后台很长时间,重新启动的时候如果没有被系统kill,那么会回到被切到后台时操作的页面,或者横竖屏切换等,这时候可以从方法参数的Bundle中或者onCreate的Bundle中获取到在onSaveInstanceState执行的时候保存的数据,onCreate会先执行;onRestoreInstanceState执行的时候onSaveInstanceState一定执行了,但是onSaveInstanceState每次执行onRestoreInstanceState可不一定都会执行,有点绕~

实际应用中,容易被系统kill的Activity可以考虑用onSaveInstanceState保存数据用onRestoreInstanceState恢复现场,比如某些内容被分享到第三方平台了如微信,这时候有一条精彩内容吸引了用户停留在wechat,看完以后返回我们的app,这时候有分享入口的Activity已经被系统销毁,就可以通过上面方法做恢复;更具app实际情况可以为“容易”被销毁的Activity加上以上的方法。

当Activity”未经允许“情况下被系统销毁,然后系统又重新打开此Activity的时候,Activity最初创建的时候Intent(getIntent()获取)中的数据还能获取到,也就是说onSaveInstanceState保存的是一些特殊的中间生成的数据。

有不恰当的地方,欢迎各位朋友指正,谢谢~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章