android_activity的生命周期和启动模式

来源:互联网 发布:pop3默认端口 编辑:程序博客网 时间:2024/05/16 11:50
  • 生命周期

一类从出生到消亡的过程(时间段)

  • 生命周期方法

对象从创建到销毁,所调用的方法。

  • 创建与销毁

onCreate 和 onDestroy 数据的保存和回显工作

  • 可见与不可见

onStart 和 onStop 可见的时候播放视频,不可见的时候暂停视频的播放

  • 获取焦点和失去焦点

onResume 和 onPause

生命周期总结

  • entire lifetime

完整生命周期 onCreate– onStart– onResume – onPause – onStop – onDestroy

  • visible lifetime

可视生命周期 : onStart() – onResume – onPause – onStop

  • foreground lifetime

前台生命周期: onResume – onPause

举一个问题,就是我们的屏幕在横竖屏调换的时候,activity的生命周期是会重新再执行一次的,
防止这个问题,我们需要在清单文件,做如下的设置。

横竖屏切换:

  1. 直接规定了是什么方向显示

android:screenOrientation=”landscape” |portrait

  1. 不指定方向,横屏就横屏显示,竖屏就竖屏显示

android:configChanges=”orientation|screenSize|keyboardHidden”

        <activity        <!--        //防止orientation(方向变化),screenSize(屏幕大小),keyboardHidden(键盘的显示和隐藏)而导致生命周期再走一遍。        -->            android:configChanges="orientation|screenSize|keyboardHidden"            android:name="com.itheima.kof.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

启动模式

Activity启动模式

  • standard

这是默认的启动模式,: 启动多少次这个界面,就会有多少个这个界面实例被压入栈中

  • singleTop

单一顶部模式:如果一个界面的实例已经存在栈顶,那么久不会再继续创建这个界面的实例,而是继续使用这个实例。 只要不是顶部,就与默认的模式一样。

场景: 为了避免出现一些奇怪的现象,为了避免让自己启动自己 短信编写界面*

  • singleTask

单一任务模式:如果一个界面的实例已经存在栈中,那么再次启动就不会继续创建新的实例,而是继续复用它,并且把它与栈顶之间的其他实例全部移除掉。

场景: 为了减轻资源的消耗,在栈中值创建一次实例, 比如: 浏览器的界面

  • singleInstance

全局唯一模式: 无论创建多少次都只有一个实例,并且这个实例放在一个独立的栈中,里面有且只能有它自己一个实例

场景: 为了减轻资源的消耗,在栈中值创建一次实例 比如: 通话界面或者紧急通话界面

        <activity android:name="com.itheima.launchmode.SecondActivity"        <!--配置启动模式-->             android:launchMode="singleInstance"            ></activity>
0 0