Android的吃鸡之旅——四大组件之Activity

写在前面

作为一个刚入门的Android开发,每当我自以为学有所成的时候,总会在n种地方看到n种打脸...啥也不说了,开始学习。
学习路线参考 https://github.com/francistao/LearningNotes

Activity有什么

生命周期

常规生命周期
onCreate -->onStart --> onResume --> onPause --> onStop-->onDestory

退到后台
onPause-->onStop

返回前台
onRestart-->onStart->onResume

锁屏
onPause-->onStop

解锁
onStart-->onResume

Activity之上有弹窗,未完全覆盖
onPause-->onStop

横竖屏切换

  • 切换到横屏
    onPause-->onStop-->onResume-->onCreate-->onStart-->onResume 也就是说Activity被销毁重创建了一次
  • 切回竖屏
    onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume
    也就是说activity被销毁重建了2次,不过为什么呢?
  • 一般情况下对横竖屏做限制,比如限制竖屏,在清单文件中进行<activity>节点中添加
    android:screenOrientation="portrait"
  • 或者禁止横竖屏切换时更改生命周期,在清单文件<activity>节点下添加
    android:configChanges="orientation|keyboardHidden|screenSize"
    api13以上需要添加screenSize
    如果只有orientation,那么切屏时还是调生命周期方法,不过只会调用一次
  • 可以通过判断横竖屏的方式加载不同的布局
  1. 在onCreate中通过 this.getResources().getConfiguration().orientation
  2. 重写onConfigurationChanged方法
  3. 在onCreate()方法中通过 this.getResources().getConfiguration().orientation 判断加载不同的布局

什么时候调用OnRestart()
一般情况下,当前Activity从不可见状态变为可见状态时,onRestart()方法就会被调用。如果用户点击Home键返回了前台或者从一个Activity跳转到另一个Activity,如果用户再次返回这个Activity,这个方法就会被执行

异常情况下生命周期分析

  1. 资源相关的系统配置发生改变导致Activity被杀死并重新创建,比如横竖屏切换
    这时候Activity被销毁,onPause() onStop() onDestory() 肯定会被调用,因为Activity是在异常情况下终止的,所以系统会调用onSaveInstanceState()方法来保存当前Activity的状态,它在onStop()之前,但是与onPause()并没有先后关系,而且这个方法只出现在Activity被异常销毁的时候,并且Activity重新创建时系统会调用onRestoreInstanceState(),这时候通过onSaveInstanceState()存下的Bundle对象会传过来,我们可以通过onRestoreInstanceState()和onCreate()方法来恢复数据,onRestoreInstanceState()调用时机在onStart()之后。这里需要注意的是,系统会自动帮我们恢复Activity的视图结构。界面重启后恢复,比如文本框中输入的数据,列表的滑动位置等。如果想确定特定view恢复了什么数据,可以去看view源码中的onSaveInstanceState()和onRestoreInstanceState()方法,比如通过TextView源码可以发现他保存了自己的文本选中状态和文本内容。

待续

发现总结的太慢,先了解了再总结

参考

https://github.com/francistao/LearningNotes
https://blog.csdn.net/ouyang_peng/article/details/9282965
https://www.jianshu.com/p/50a6376fa87e
《Android开发艺术探索》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容