在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. 在Ubuntu中和Android中添加开机自启动的守护进程
  2. Android(安卓)从启动到程序运行发生的事情
  3. Ubuntu共享WiFi(AP)给Android方法【修正版】
  4. Android(安卓)应用初始化及窗体事件的分发
  5. Android启动脚本init.rc
  6. Android(安卓)OTA 升级之三:生成recovery.img
  7. Android面试复习(Android篇一)
  8. Activity的启动流程(基于Android(安卓)10.0源码)
  9. Android(安卓)系统启动过程详解

随机推荐

  1. getLayoutInflater().inflate
  2. 自学第五十九天
  3. android studio 打包jar 及混淆
  4. Android中常见面试题
  5. android验证邮箱输入是否合法
  6. android sdk 超时 解决办法
  7. Android学习之Android(安卓)5.0分享动画
  8. Android(安卓)Update Engine分析(八)升级包
  9. 在Android中使用MD5
  10. service 的调用【转】