Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。
Android中,Activity的启动模式分为四种,下面我将从介绍,特点,应用场景来具体一一分析:
(1)standard:标准模式。
介绍:Activity的默认启动模式。当启动该模式下的Activity时,不管Task栈中是否存在该实例Activity,系统都将会创建一个新的Activity,放入Task栈的顶端,即栈顶。
特点:每次启动,都将会创建一个新的实例放入栈顶。
(2)singleTop:Task顶单例模式。
介绍:当启动该模式下的Activity时,系统首先会去Task栈中搜索是否存在该实例的Activity。如果存在栈顶,即复用栈顶的该实例Activity。如果Task中存在,单没有在栈顶,系统就会重新创建一个新的Activity实例,并放入栈顶。
特点:该模式下的Activiy可以分为两种情况:
1>存在Task栈 ,该情况又分为两种情况:
1>在栈顶 :此情况下,启动该Activity就会复用栈顶的Activity,并调用onNewIntent(Intent intnet)方法,生命周期为:onNewIntent()->onReStart()->onStart()->onResume()。
2>不在栈顶:此情况下,就会重新创建一个新的Activity实例,并放入栈顶,不会调用onNewIntent(Intent intnet)方法,生命周期为:onCreate->onStart()->onResume()。
2>不存在Task栈:系统创建一个新的Activity实例并放入栈顶,生命周期为:onCreate->onStart()->onResume()。
应用场景:
App程序中(或浏览器中)保存的书签,假如用户看到一个界面保存自己喜欢的标签,假如要保存10个,这个时候用户在返回键的时候,则会返回10次才能返回到App应用中, Android下singleTop 则解决该问题。
(3)singleTask:Task内单例模式。
介绍:
Task栈内复用模式。此模式下也分为两种情况,1>Task内不存在该Activity实例 2>Task栈中存在该Activity实例,在特点中将详细介绍。
特点:
1>Task内不存在该Activity实例 :当系统搜索Task栈 后发现没有改Activity实例,就会创建该Activity实例并将其放入Task栈的顶端,此时不会调用onNewIntent(Intent intnet)。2>Task栈中存在该Activity实例:此情况下会分为两种情况:1>Activity在栈顶:系统发现要启动的Activity实例在栈顶,就会直接启动该实例,并回调onNewIntent(Intent intnet)方法。2> Activity不在栈顶:系统发现要启动的Activity实例不在栈顶,此时系统就会把该Activity放到栈顶,并将该Activity上面的Activity实例全部清除,onNewIntent(Intent intnet)方法被回调。
应用场景:
(1)如果一个App中,有一个功能需要加载网页内容 ,打开一个 browserActiviy现在网页内容,则内存开销非常大,首先要初始化webkit /c++ 嵌入式浏览器内核broweractivity 配置了singleTask,空间换时间,使用该模式可以节省内存开销。(2)App实现退出功能,将主页Activity的launchMode设置为SingleTask。
(4)singleInstance:单实例模式。
介绍:在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
特点:有点像共享Activity实例的感觉,即不管是谁访问该Activity,系统都会使用同一个Activity实例。
注意:在系统发现没有该Activity时,将会创建一个新的Task栈,单独存放该Activity实例。
应用场景 :
App各种词典,向有道词典,什么金山词典,说极端是因为不想被放置到同一个任务栈里面,它是全局的系统程序应用,达到节省内存的使用目的。
欢迎拍砖!
更多相关文章
- 在Ubuntu中和Android中添加开机自启动的守护进程
- Android(安卓)从启动到程序运行发生的事情
- Ubuntu共享WiFi(AP)给Android方法【修正版】
- Android(安卓)应用初始化及窗体事件的分发
- Android启动脚本init.rc
- Android(安卓)OTA 升级之三:生成recovery.img
- Android面试复习(Android篇一)
- Activity的启动流程(基于Android(安卓)10.0源码)
- Android(安卓)系统启动过程详解