暑假计划-《Android开发艺术探索》01

《Android开发艺术探索》第九页的思考。

怎么判断异常退出和正常退出、onSaveInstanceState()什么时候调用?

finish()是结束生命周期,onDestroy()是生命周期的最后一个方法(https://www.zhihu.com/question/31116186,看张明云的回答)。

1:按back键会回调onBackPressed()方法,里面又调用了finish(),finish()又调用了onDestroy()(onDestroy()是系统调用,可能调用也可能不调用,例如你在onStop()里做了很多事,还没走到onDestroy()就退出了)。所以生命周期是onPause()->onStop()->onDestroy()(但是在back键的生命周期中为什么会一定调用onDestroy呢?),调用了finish()(说明是正常退出App),是不会回调onSaveInstanceState()方法的。

2:按home键,将App挂在后台,onPause()->onStop(),没有调用finish()(说明是异常退出App)。

3:按电源键进行睡眠,没有调用finish()(说明是异常退出App)自己可以试试具体生命周期~

4:activity跳转,没调用finish()(说明是异常退出App)自己可以试试具体生命周期~

5:横竖屏切换。没调用finish()(说明是异常退出App)自己可以试试具体生命周期~

我自己可能有错误的总结:对android来说,你调用了finish(),系统认为你正常退出,就不给你储存你想保存的数据(需要你自己进行储存),即不会调用onSaveInstanceState()。而如果你没有调用finish(),界面就处于不可见了,说明你异常退出了,就给你保存,进行回调onSaveInstanceState()。

注:由于本人技术不熟练,以及网上参考可能有错误,例如:finish()调用的问题,onDestroy()可能什么时候调用的问题等都不是很清楚,只能让读者有个思考的起点,毕竟我还未研究android源码,有错误不能难免,此暑假计划系列只能供参考。如果你能指正,那真是谢谢您了。如果不能指正也没事,大神都是一步一步走过来的。

切记一定要抱有批判的心态看我的文章。


参考:http://blog.sina.com.cn/s/blog_95c607dd0102ux1v.html---关于finish()和onDestroy()的区别。

参考:http://blog.csdn.net/chenmeng911/article/details/50439727---onSaveInstanceState()在哪些情况下调用。

参考:http://www.cnblogs.com/SharkBin/p/3539658.html---onSaveInstanceState()的调用时机。

参考:http://blog.csdn.net/lixiang0522/article/details/7557558---BACK键和HOME键对生命周期的影响。

参考:http://www.cnblogs.com/xiaoQLu/p/3324503.html---你还在问横竖屏切换的生命周期?

推荐阅读更多精彩内容