Android世界:Activity的启动模式及其适用范围

一、Activity启动模式简介

activity启动模式,可以理解为activity在任务栈(也叫“回退栈”)的回退规则,即点击“back”键时,activity的执行顺序。为节省资源,方便调用,Android构建不同的启动模式以便于开发者在不同场景使用。

该属性声明在Manifest文件中,由launchMode进行配置,内含4种启动模式,如下:

Android世界:Activity的启动模式及其适用范围_第1张图片

 

 

 

补充:任务栈,是一个先进后出的存储空间,存放运行过程中的各activity对象引用。


二、启动模式介绍及使用场景

声明:下方各流程图均来源于https://blog.csdn.net/zy_jibai/article/details/80587083,有兴趣可以去看看。


Standard:标准模式,不声明该属性时,默认模式。启动activity时,将activity对象放置到任务栈的栈顶,如果不存在任务栈,首先创建一个任务栈;正常创建、销毁activity。

优点:便于activity的正常管理,逻辑相对简单;

缺点:同一activity可能被创建多次,不利于activity的重用,造成资源的浪费;

Android世界:Activity的启动模式及其适用范围_第2张图片

 

 

 


SingleTop:单顶模式,当activity存在于栈顶时,不会重构activity,而是调用onNewIntent(Intent intent)方法加载之前的页面;当activity不存在于栈顶,就会重新构建activity,并将其显示到栈顶;

Android世界:Activity的启动模式及其适用范围_第3张图片

 

 

 

优点:在栈顶时,重用栈顶activity;

缺点:activity可能存在多次创建;

适用场景:①来推送消息后,点击消息跳转到详情界面,防止创建多个界面;②即时通讯的聊天界面等。

 

 

 


SingleTask:单任务栈模式;当activity不存在于任务栈,进行创建;当存在于任务栈中,即移除其顶部的activity,将其移到栈顶,显示出来。

优点:actiivity重用,只存在一个activity;节约内存,用户体验好;

缺点:移除其他activity,不利用管理;

Android世界:Activity的启动模式及其适用范围_第4张图片

 

 

 

适用范围:应用的启动界面,防止其他应用在调启时,创建多个应用界面;如:网易新闻的新闻界面(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

缺点:不利于回收利用资源;

Android世界:Activity的启动模式及其适用范围_第5张图片

 

适用场景:需要全局只创建一个activity的场景,如,网易新闻的锁屏界面、手机来电界面等;

 

 

 

你可能感兴趣的:(Android世界:Activity的启动模式及其适用范围)