在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各种词典,向有道词典,什么金山词典,说极端是因为不想被放置到同一个任务栈里面,它是全局的系统程序应用,达到节省内存的使用目的。


上面即为Android中的四种启动模式,我们在开发Android项目时会经常使用到,巧妙设置Activity的启动模式会节省系统开销和程序运行效率。

欢迎拍砖!

更多相关文章

  1. 修改 Android 系统默认语言版本
  2. Android 系统启动过程详解
  3. 【转】 Android系统集成第三方pre-build库和程序
  4. android编译系统之后刷img
  5. Android 8.0系统 默认赋予应用权限
  6. android系统编译资料
  7. android Activity启动初始化与实例化Activty对象的用途研究
  8. 获取系统内存
  9. 【android】在adapter中获取listview的实例

随机推荐

  1. Android帧缓冲区(Frame Buffer)硬件抽象层(H
  2. Python3+appium环境搭建
  3. Android程序设计-刘刚-专题视频课程
  4. Android(安卓)BLE disconnect()和close()
  5. Android(安卓)TextView的图片和文字居中
  6. OnItemClickListener不响应
  7. DSBridge 更新公告:已支持 cocoapods 和 g
  8. Android中的Handler的post方法详解
  9. OpenGL ES for Android(安卓)环境搭建
  10. 自定义Activity栈来管理android的Activit