活动的启动模式

活动的启动模式-standard

在实际项目中,我们应该根据特定需求为每个活动指定恰当的启动模式。

四种启动模式:

standard、singleTop、singleTask和singleInstance

可以在AndroidManifest.xml设置活动的launchMode模式

standard是默认的启动模式

不写的话 所有活动默认都是这个

这个模式下,每个新活动都置于栈顶

系统不会在乎这个活动是否已经在栈中存在。

每次启动都会创建该活动的新实例

主活动–》普通活动—》调到主活动(新)

上面的xin的主活动 系统不会管原来的主活动

下面我们来演示一下

在主活动中添加一个按钮,然后这个按钮事件中使用Intent中也调到主活动中

疑问? 好像我们只退出一次 就退出程序了

这里不知道是什么原因

哪位同学找出了 可以分享一下。

活动的启动模式-singleTop

如果指定活动的启动模式为singleTop 则在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会创建新的活动实例。

下面我来试一试 在AndroidManifest.xml 中设置主活动的launchMode属性为singleTop

然后 不管我们点击多少次按钮都不会再创建新的主活动 日志值输出一次。

我们按一次back 就可以退出android

但是 如果我们的活动并不是在栈顶的时候,那么还是可以创建新的活动的

下面我们来尝试一下,修改Intent 这次打开到

另外一个活动,然后我们再在第二个活动中 打开主活动。

主要是 在第二个活动的时候 栈顶不是主活动 这个时候 是可以创建主活动的。

I/Choreographer: Skipped 37 frames!  The application may be doing too much work on its main thread.Code language: HTTP (http)

上两节课back就退出桌面的问题

是我们在按钮事件里面 多加了一句finish();

Log.e(TAG, this.toString()); 记录当前的活动的内存地址

singleTask模式

使用singleTask可以让某个活动在整个应用程序中都只存在一个活动实例。

上面的singleTop可以保证栈顶是只有一个。

singleInstance模式和任务Task

这种模式下面 系统会启动一个新的返回栈来管理这个活动

比如我们有三个活动,我们给第二个活动指定launchMode为singleInstance 则第二个活动则是使用另外一个返回栈管理的。

这个时候当我们从第一个活动进入第二个 再由第二个进入第三个

如果我们从第三个活动back退回的时候 它先回到第一个活动 因为第一个和第三个活动是同一个返回栈的。

然后我们在第一个活动中退回的时候 会回到第二个活动,因为这个时候 第一个和第二个活动的返回栈已经没有活动了 这个时候 系统会返回应用中的其他返回栈的栈顶 也就是活动2 如果我们在back的话 则返回桌面

public void onClick(View view){
    Intent it = new Intent(NormalActivity.this,Activity3.class);
    startActivity(it);
    finish();
}Code language: JavaScript (javascript)
05-13 08:14:26.890 4746-4746/com.foxdevelop.www.lifedemo E/主活动: 113
05-13 08:14:33.755 4746-4746/com.foxdevelop.www.lifedemo E/普通活动: 114
05-13 08:14:37.932 4746-4746/com.foxdevelop.www.lifedemo E/第三个活动: 113

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注