美文网首页
Android的吃鸡之旅——四大组件之Activity

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

作者: one1go | 来源:发表于2018-05-17 00:46 被阅读8次

    写在前面

    作为一个刚入门的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开发艺术探索》

    相关文章

      网友评论

          本文标题:Android的吃鸡之旅——四大组件之Activity

          本文链接:https://www.haomeiwen.com/subject/kvdvdftx.html