Activity的launchMode:singleTop,singleTask与singleInstance

2024-06-22 13:48

本文主要是介绍Activity的launchMode:singleTop,singleTask与singleInstance,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://blog.csdn.net/gaojinshan/article/details/17392987

转自:http://www.cnblogs.com/fanchangfa/archive/2012/08/25/2657012.html

Activity启动模式设置:
        <activity android:name=".MainActivity" android:launchMode="standard" />
Activity的四种启动模式:
    1. standard
        模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。
    2. singleTop
        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例,虽然它不会创建新的Activity对象,不过它每次回调用onNewIntent()方法)。
    3. singleTask
        如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 
    4. singleInstance
        在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。可以类比为windows多个程序启动浏览器,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。




相关内容,可以参见官方网址:http://developer.android.com/guide/components/tasks-and-back-stack.html


如图所示,如果ABC三个Activity的launchMode都是standard,那么按照图示顺序调用后,堆栈为ABCBB;
而如果界面ActivityB的launchMode为singleTop,同样的调用关系下,堆栈为ABCB,栈顶的B,被复用了。

singleTop模式,适合于与用户交互时保持信心更新的界面Activity,比如联系人的搜索界面界面等;

singleTop仅作为栈顶Activity时才可能被复用,同一个Activity在系统中,还是会存在多个的现象。
singleTasksingleInstance,在整个系统中,仅会有一个对象存在,以节省内存开销。
如果运行模式不是默认的standard模式,那么,该Activity需要重载onNewIntent的函数。
standard和singleTop,对它的调用,不会引起任务切换;而singleTask和singleInstance,则相反。
换句话说,而singleTask和singleInstance,其Activity的对象,仅可作为任务的根Activity而存在,
而standard和singleTop,其Activity的对象,则可能存在Activity堆栈的任何位置。

如图所示,当B的运行模式为singleTask和singleInstance时,所有对B的调用,
都会跳转到以B为根的任务中进行,而与调用Activity所在的任务,毫无关联。

singleTask和singleInstance唯一的区别是:
singleInstance,其所在的任务中,包含且只包含一个该Activity的对象,不会再有其他的Activity对象;
而singleTask,其任务中,则可能包含多个其他相关的Activity对象。

singleTask和singleInstance适用于消耗内存较多的单实例界面,比如浏览器和音乐播放器等。

摘自《Android开发精要》

这篇关于Activity的launchMode:singleTop,singleTask与singleInstance的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084467

相关文章

LeakCanary测试app内存泄露+registerActivityLifecycleCallbacks管理Activity的生命周期

public class MyApplication extends Application {private String tag = "MyApplication";private static Stack<Activity> activityStack;//检测内存泄露private RefWatcher refWatcher;@Overridepublic void onCreate()

android studio怎么修改创建的Activity的模板?

1.找到android studio的安装目录,如下图,找到对应文件,修改EmptyActivity的模板。 2.修改成如下: 3.新建的EmptyActivity的默认代码如下:

Activity转屏重建之 Activity.onConfigurationChanged

偶尔也会遇到由于转屏引起的一些问题。 有些时候,并不希望由于转屏使得Activity取重建。 再如键盘消失后的重建。 下面以一个demo为例子,小小总结一下用法。 如果想在转屏后,屏幕上立马打印出当前处于什么横竖屏状态 1.都知道有个属性android:configChanges可以用来定义什么情况下可以使得Activity不会restart。 android:configC

查看当前正在运行的Activity列表

1、在终端中输入, 注意adb如果没有配置到系统环境变量里,则需要cd到它所在的文件夹下 “adb shell dumpsys activity” 2、出来的结果比较多,直接搜索"Running" ,找到 Running activities (most recent first):       TaskRecord{4069c020 #4 A shy.luo.ta

Activity被回收导致其内部的Fragment

方式一:   MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果! 方式二: @Overrideprotected void onSaveInstanceState(Bundle outSta

OEM Activity Summary AAS 不记录后台进程 比如 rman

OEM中rman 备份认为是后台进程,所以在Activity Summary未显示 ,AAS 可以显示 去掉后台进程rman 一个也不显示!

Unable to instantiate activity

报的错, 04-25 20:56:13.629: E/Trace(1790): error opening trace file: No such file or directory (2) 04-25 20:56:13.653: E/AndroidRuntime(1790): FATAL EXCEPTION: main 04-25 20:56:13.653: E/AndroidRunt

Activity状态保存【onSaveInstanceState和onRestoreInstanceState】

Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法: 1. 基本作用:   Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()

Android - 总结Activity与Fragment打开的时候获取组件的大小

Activity中获取 组件大小        代码: @Overridepublic void onWindowFocusChanged(boolean hasFocus) {// TODO Auto-generated method stubsuper.onWindowFocusChanged(hasFocus);Log.d("TAG", "A-button1-->"+button1);L

Activity生命周期 与 重建

每一个Android应用程序在运行时,对于底层的Linux Kernel而言都是一个单独的进程,但是对于Android系统而言,因为局限于手机画面的大小与使用的考虑,不能把每一个运行中的应用程序窗口都显示出来。   所以通常手机系统的界面一次仅显示一个应用程序窗口,Android使用了Activity的概念来表示界面。   运行中的应用程序分为五大类,分别是:     前景模式