美文网首页
Activity -> LaunchMode

Activity -> LaunchMode

作者: markchan | 来源:发表于2017-10-18 17:05 被阅读0次

    定义了Activity加载到Activity Task(任务栈)的行为

    Activity的LaunchMode(启动模式)有以下四种:

    [假设操作的Activity对象为A_Activity]

    1. Standare - Activity默认的启动模式

    Standare模式下启动A_Activity, 系统都会新建一个A_Activity的实例, 并将其加入到任务栈中, 同时依次调用A_ActivityonCreate()onStart()onResume()的生命周期方法

    2. SingleTop - 栈顶复用模式

    SingleTop模式下启动A_Activity, 如果A_Activity位于任务栈的栈顶, 那么再次启动A_Activity时, 系统将不会再去新建一个A_Activity实例,而是复用已位于任务栈栈顶的A_Activity

    • A_Activity位于栈顶:

      复用位于栈顶的实例, 并回调A_ActivityonNewIntent()方法

    • A_Activity不位于栈顶(包括有实例位于任务栈中但不位于栈顶在任务栈中没有任何实例)

      此时在SingleTop的模式下启动的A_Activity与Standard模式下启动的A_Activity的流程是一样的: 系统会新建一个A_Activity的实例, 并依次调用其对应的生命周期方法

    3. SingleTask - 栈内复用模式

    该模式相当于Activity特定任务栈中的单例模式. 与SingleTop类似, 只不过是检测范围的不同: SingleTop的检测范围是检测栈顶元素是否为A_Activity, 而SingleTask的检测范围则扩散到整个任务栈中去检测是否已经存在A_Activity实例

    • 任务栈中存在A_Activity实例

      直接将A_Activity置于栈顶,并将A_Activity以上的Activity都从任务栈中移出销毁, 同时回调其onNewIntent()方法

    • 任务栈中不存在任何A_Activity实例

      此时在SingTask的模式下启动的A_Activity与Standard模式下启动的A_Activity的流程是一样的: 系统会新建一个A_Activity的实例, 并依次调用其对应的生命周期方法

    4. SingleInstance

    这个模式非常接近于SingleTask, 系统中只允许一个A_Activity的实例存在. 区别在于持有A_Activity的任务栈中只能有这个一个Activity: 即这个单例本身

    设置Activity的启动模式

    方式一: 直接在AndroidManifest.xml指定Activity的启动模式

    <?xml version="1.0" encoding="utf-8"?>
    <manifest>
    
        <application>
            <activity
                android:name=".XxxActivity">
                android:launchMode="standard | singleTop | singleTask | singleInstance">
            </activity>
        </application>
    
    </manifest>
    

    方式二: 通过Intent添加IntentFlag(猛戳>>常用的IntentFlag的介绍)来指定Activity的启动模式

    Intent intent = new Intent();
    intent.setClass(MainActivity.this,TargetActivity.class);
    intent.addFlags(Intent.FLAG_XXX);
    startActivity(intent);
    
    Refer

    相关文章

      网友评论

          本文标题:Activity -> LaunchMode

          本文链接:https://www.haomeiwen.com/subject/gjeeuxtx.html