Android启动模式
来源:互联网 发布:怎么样开淘宝网店 编辑:程序博客网 时间:2024/06/07 20:41
Android的启动模式一共有4种,分别是:
- standard 默认
- singleTop 栈顶唯一
- singleTask 栈内唯一
singleInstance 实例唯一
启动模式可以在AndroidManifest.xml文件中< activity >标签下配置
android:launchMode,如下代码所示:
<activity android:name=".MainActivity" android:launchMode="standard"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
还可以在启动一个Activity的时候,设置一个启动标识,代码如下:
Intent i = new Intent(MainActivity.this, MainActivity.class);i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(i);
说完怎么设置launchMode,再来说下这4个启动模式分别有什么作用:
standard
standard是默认的启动模式,比如不在AndroidManifest.xml文件< activity >标签下配置launchMode,那么默认就是这种启动模式,默认的启动模式会将启动的Activity依次入栈,按back键,后进先出的出栈,我们通过一个例子实际看下,在布局文件中有一个button,然后为这个按钮设置点击事件,点击的时候以standard启动模式启动自己
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this, MainActivity.class); startActivity(i); }});
连续点击5次按钮,在adb shell中查看Activity栈,dumpsys activity 可以找到对应我们的包名的Activity栈可以看到:
栈里面有6个MainActivity,启动时的一个,按5次按钮时启动了5个MainActivity,可以得出和刚才一样的结论:
默认的启动模式会将启动的Activity依次入栈,按back键,后进先出的出栈
singleTop
singleTop 栈顶唯一,当配置launchMode=”singleTop”时
1.启动模式是singleTop的Activity为栈顶时,再去启动这个Activity,并不会产生新的Activity入栈,而是复用栈顶Activity
2.启动模式是SingleTop的Actiyity不为栈顶时,再去启动这个Activity,会产生新的Activity入栈
<activity android:name=".MainActivity" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>
将MainActivity的launchMode属性配置为singleTop,布局文件还是一个按钮,当点击按钮时启动自己,这时点击5次按钮,观察Activity栈如下:
可以看到栈中还是一个MainActivity,当前Activity也是栈顶。这里可能有疑问的是:当反复启动栈顶Activity时生命周期方法会重新调用吗?答案是onResume和onPause方法会成对调用,其它生命周期不会调用,有兴趣的同学可以试下。
现在看第二种情况,当MainActivity不是栈顶Activity时,再去启动MainActivity时,Activity栈会是什么情况了?如下图
可以看到当配置了singleTop属性的MainActivity不是栈顶的时候,再去启动MainActivity会创建新的Activity入栈。
singleTask
singleTask 是栈内唯一,和singleTop不同的时,当配置了singleTask的Activity不在栈顶时也会复用,如果不在栈顶,会强制其它Activity出栈,只到它位于栈顶
当多次启动singleTask的Activity可见栈中还是一个ActivitysingleInstance
singleInstance模式是实例唯一,以这种模式启动的Activity会新建一个Activity栈,单独入栈这个Activity
以launchMode=singleInstance启动TwoActivity,如下
可以看到启动TwoActivity时,是新建了一个Activity栈来存放TwoActivity的。
到这里4种启动模式就说完了,有兴趣的同学可以通过配置不同的launchMode属性来观察Activity栈的情况,深入分析下。
- android Activity启动模式
- Android Activity启动模式
- android 启动模式
- Android 启动模式
- android中四种启动模式
- android ics 启动模式
- android启动模式
- android启动模式
- Android启动模式分析
- Android Activity启动模式
- android 启动模式(二)
- android 启动模式
- android activity 启动模式
- android 启动模式
- Android的启动模式
- android的启动模式
- Android - Activity - 启动模式
- android Activity启动模式
- 80. Remove Duplicates from Sorted Array II
- FreeCodeCamp备查簿(1:#6-#30)
- WebGL之旅(二十) 帧缓冲区对象FBO
- Burp Suite详细基本用法(一):Proxy、Target模块
- python中的面向对象
- Android启动模式
- 如何理解Netfilter中的连接跟踪机制
- python3中字符串和字节之间转换
- 全面解析Java注解--慕课网笔记
- find用法
- hadoop之从数据流向角度分析MapReduce流程
- PAT基础题 4-2 多项式求值
- JMockit实践--(3)Expectations
- iOS Swift let和var的区别