服务器之家

服务器之家 > 正文

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

时间:2021-04-23 15:29     来源/作者:Android开发网

当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当activity实例创建后就会放入任务栈中。activity启动模式的设置在androidmanifest.xml文件中,通过配置activity的属性android:launchmode=""设置。

一、启动模式介绍

  启动模式简单地说就是activity启动时的策略,在androidmanifest.xml中的标签的android:launchmode属性设置;

  启动模式有4种,分别为standard、singletop、singletask、singleinstance;

讲解启动模式之前,有必要先讲解一下“任务栈”的概念;

  任务栈

  每个应用都有一个任务栈,是用来存放activity的,功能类似于函数调用的栈,先后顺序代表了activity的出现顺序;比如activity1-->activity2-->activity3,则任务栈为:

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

二、启动模式

(1)standard模式(默认):每次激活activity时(startactivity),都创建activity实例,并放入任务栈;

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

我们平时直接创建的activity都是这种模式的activity,这种模式的activity的特点是:只要你创建了activity实例,一旦激活该activity,则会向任务栈中加入新创建的实例,退出activity则会在任务栈中销毁该实例。

(2)singletop模式:如果某个activity自己激活自己,即任务栈栈顶就是该activity,则不需要创建,其余情况都要创建activity实例;

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

(3)singletask模式:如果要激活的那个activity在任务栈中存在该实例,则不需要创建,只需要把此activity放入栈顶,并把该activity以上的activity实例都pop;

如果任务栈中存在该模式的activity实例,则把栈中该实例以上的activity实例全部移除,调用该实例的newinstance()方法重用该activity,使该实例处於栈顶位置,否则就重新创建一个新的activity实例。

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

(4)singleinstance模式:如果应用1的任务栈中创建了mainactivity实例,如果应用2也要激活mainactivity,则不需要创建,两应用共享该activity实例;

当该模式activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的activity,都会通过调用实例的newinstance()方法重用该activity,此时使用的都是同一个activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的activity。

Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

singtask的应用:

可以用来退出整个应用。

将主activity设为singtask模式,然后在要退出的activity中转到主activity,然后重写主activity的onnewintent函数,并在函数中加上一句finish。

附:

退出单个activity方法:

调用finish

  杀死该进程:killprocess(process.mid)

终止正在运行的虚拟机:system.exit()

退出整个应用:

  制造抛异常导致整个程序退出

  将所有的activity放入到一个list中,然后在需要退出的时候,将所有的activity,finish掉

  通过广播来完成退出功能

通过广播来完成退出功能,具体实现过程是这样的:在每个activity创建时(oncreate时)给activity注册一个广播接收器,当退出时发送该广播即可。大概的代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
intentfilter filter = new intentfilter();
filter.addaction("finish");
registerreceiver(mfinishreceiver, filter);
……
}
private broadcastreceiver mfinishreceiver = new broadcastreceiver() {
@override
public void onreceive(context context, intent intent) {
if("finish".equals(intent.getaction())) {
log.e("#########", "i am " + getlocalclassname()
+ ",now finishing myself...");
finish();
}
}
};

  把上面的代码写在一个基类里面,这样,在需要退出的地方调用close,发送广播,每个activity接收到广播后,就会将自己finish掉。

以上所述是小编给大家分享的android入门之activity四种启动模式(standard、singletop、singletask、singleinstance),希望大家喜欢。

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
返回顶部