activity启动模式,可以理解为activity在任务栈(也叫“回退栈”)的回退规则,即点击“back”键时,activity的执行顺序。为节省资源,方便调用,Android构建不同的启动模式以便于开发者在不同场景使用。
该属性声明在Manifest文件中,由launchMode进行配置,内含4种启动模式,如下:
补充:任务栈,是一个先进后出的存储空间,存放运行过程中的各activity对象引用。
声明:下方各流程图均来源于https://blog.csdn.net/zy_jibai/article/details/80587083,有兴趣可以去看看。
Standard:标准模式,不声明该属性时,默认模式。启动activity时,将activity对象放置到任务栈的栈顶,如果不存在任务栈,首先创建一个任务栈;正常创建、销毁activity。
优点:便于activity的正常管理,逻辑相对简单;
缺点:同一activity可能被创建多次,不利于activity的重用,造成资源的浪费;
SingleTop:单顶模式,当activity存在于栈顶时,不会重构activity,而是调用onNewIntent(Intent intent)方法加载之前的页面;当activity不存在于栈顶,就会重新构建activity,并将其显示到栈顶;
优点:在栈顶时,重用栈顶activity;
缺点:activity可能存在多次创建;
适用场景:①来推送消息后,点击消息跳转到详情界面,防止创建多个界面;②即时通讯的聊天界面等。
SingleTask:单任务栈模式;当activity不存在于任务栈,进行创建;当存在于任务栈中,即移除其顶部的activity,将其移到栈顶,显示出来。
优点:actiivity重用,只存在一个activity;节约内存,用户体验好;
缺点:移除其他activity,不利用管理;
适用范围:应用的启动界面,防止其他应用在调启时,创建多个应用界面;如:网易新闻的新闻界面(MainActivity)
做浏览器、微博之类的应用,比如其他App需要打开我们的浏览器页面,就可以配置他为singleTask模式,保证他只有一个唯一实例,节约内存同时按下返回键后的感官也更顺畅。但是需要注意,提供给人调用的页面最好是栈底元素。
SingleInstance:单实例模式,创建的activity位于新的task中。如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒。
优点:
1. 以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个这样的实例。
2. 以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。
3. 以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他开启的任何activity都会运行在其他任务中。
4. 被singleInstance模式的Activity开启的其他activity,能够在新的任务中启动,但不一定开启新的任务,也可能在已有的一个任务中开启。
原文:https://blog.csdn.net/zivensonice/article/details/51569502
缺点:不利于回收利用资源;
适用场景:需要全局只创建一个activity的场景,如,网易新闻的锁屏界面、手机来电界面等;