- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当activity实例创建后就会放入任务栈中。activity启动模式的设置在androidmanifest.xml文件中,通过配置activity的属性android:launchmode=""设置.
1、启动模式介绍 。
启动模式简单地说就是activity启动时的策略,在androidmanifest.xml中的标签的android:launchmode属性设置; 。
启动模式有4种,分别为standard、singletop、singletask、singleinstance; 。
讲解启动模式之前,有必要先讲解一下“任务栈”的概念,
任务栈 。
每个应用都有一个任务栈,是用来存放activity的,功能类似于函数调用的栈,先后顺序代表了activity的出现顺序;比如activity1-->activity2-->activity3,则任务栈为:
2、启动模式 。
(1)standard模式(默认):每次激活activity时(startactivity),都创建activity实例,并放入任务栈; 。
我们平时直接创建的activity都是这种模式的activity,这种模式的activity的特点是:只要你创建了activity实例,一旦激活该activity,则会向任务栈中加入新创建的实例,退出activity则会在任务栈中销毁该实例.
(2)singletop模式:如果某个activity自己激活自己,即任务栈栈顶就是该activity,则不需要创建,其余情况都要创建activity实例; 。
(3)singletask模式:如果要激活的那个activity在任务栈中存在该实例,则不需要创建,只需要把此activity放入栈顶,并把该activity以上的activity实例都pop; 。
如果任务栈中存在该模式的activity实例,则把栈中该实例以上的activity实例全部移除,调用该实例的newinstance()方法重用该activity,使该实例处於栈顶位置,否则就重新创建一个新的activity实例.
(4)singleinstance模式:如果应用1的任务栈中创建了mainactivity实例,如果应用2也要激活mainactivity,则不需要创建,两应用共享该activity实例; 。
当该模式activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的activity,都会通过调用实例的newinstance()方法重用该activity,此时使用的都是同一个activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的activity.
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),希望大家喜欢.
最后此篇关于Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)的文章就讲到这里了,如果你想了解更多关于Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想知道 singleInstance Activity 的默认任务关联是什么? 因为每个 singleInstance Activity 在新任务中作为根 Activity 打开。并且无需声明 an
我的应用程序中有 2 个 Activity 。 A Activity 是启动器 Activity 。当我第一次运行应用程序时,启动器 Activity 会运行,但是当我按下主页按钮并通过单击应用程序图
我试图更改 Activity 转换的默认动画,但我遇到了一个问题。 我可以更改正常 Activity 的动画,但是当我将启动模式更改为 singleInstance 时,我第一次打开 Activity
可能重复 Deep linking and multiple app instances .我在我的应用程序中实现了深度链接。我有作为启动器的 Splash Activity 和处理 list 中定义
据我所知,startActivityForResult 无法与 launchMode singleInstance 一起正常工作 here .而最近,我发现它在 Android Lollipop(5.
我有一个 Activity 在 list 中定义为: android:launchMode="singleInstance" 现在我想从一个不知道它存在(不引用现有实例)的不同 Activity 转
我有几个使用 launchMode SingleInstance 的 Activity 。注销时我想完成所有 Activity 并打开 launchScreen。 val intent = Inten
我有一个 Activity 显示列表中的多个元素,用户可以滚动浏览这些元素。除了浏览添加的新元素的列表之外,用户还可以单击弹出通知以立即转到该元素。我只希望运行列表的一个实例,所以我将其设为 Sing
一个 Activity 是一个单一的实例 Activity 。 import android.app.Activity; import android.content.Intent; import a
一个Activity有四种启动模式,standard、singletop、singletask和singleInstance。前三者比较容易理解,应用广泛。但是到现在为止,我没有发现任何使用singl
我想知道是否可以在启动 singleInstance Activity 时取消所有动画,我已经在用了 @Override public void onStop() { super.onStop
我已经阅读了谷歌 Android 开发者页面,但任务的概念 ( http://developer.android.com/guide/components/tasks-and-back-stack.h
我在我的应用程序中使用了 android:launchMode="singleInstance" 如何在 android api 2.3.3 中完美编译和运行但是当我在基于api 4.0 的andro
我遇到了一个有趣的问题,一个 Activity 被创建了多次,即使它在 list 中被定义为一个 singleTask 或一个 singelInstance Activity。这是如何重现的。比如说,
我在为不同的 Activity 实现不同类型的启动模式时遇到了设计问题。我有 5 个 Activity 。 视频列表 视频详情 收藏夹列表 视频搜索 视频播放器 当用户启动应用程序时,它会转到显示视频
我的应用程序包含多个 Activity ,主要 Activity (A) 处于 launchMode singleTop,每个 Activity 都处于 singleInstance 模式。 我选择了
我正在寻找何时使用 launchMode="singleInstance" 的具体示例。我到处阅读,据说很少有场合应该使用它。所以我很惊讶我从来没有看到例子! 我找到的最接近的解释是 here它说:
IProductRepositoryProxy ProductDataServiceProviderInstance = new ServiceProductDataProvider(); build
我在 StackOverflow 上没有找到任何可以回答我问题的帖子。我已经看过了Android singletop singleinstance and singletask但这个问题和他的项目场景
关闭。这个问题是opinion-based .它目前不接受答案。 关闭3年前. 锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或交互。 我有一个应用程序
我是一名优秀的程序员,十分优秀!