欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-18 22:38:46
当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当activity实例创建后就会放入任务栈中。activity启动模式的设置在androidmanifest.xm...

当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当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注册一个广播接收器,当退出时发送该广播即可。大概的代码如下:

@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),希望大家喜欢。

上一篇:

下一篇: