美文网首页
Android LaunchMode启动模式

Android LaunchMode启动模式

作者: Wavky | 来源:发表于2018-07-12 21:55 被阅读0次

    指定Activity的LaunchMode:

    <activity
        android:name=".SingleTaskActivity"
        android:label="singleTask launchMode"
        android:launchMode="singleTask">
    

    standard

    默认模式,在Android 5.0 Lollipop以前,不论在当前App或是第三方App中呼出,指定新创建的Activity将会添加到调用者App的Task中,并叠加在其Stack堆栈顶,通过任务管理器中可见该Activity界面归属于调用者的App进程。

    在Lollipop及之后的版本,如果调用者是第三方App,则该Activity会被添加到一个新建Task的根部,通过任务管理器会看到该Activity依然归属于第三方App(与调用者App分离)

    singleTop

    大部分情况下表现与standard相同。

    例外情况是,当Task顶已存在相同的Activity实例时,将不再创建新Activity,而是通过onNewIntent()方法重用栈顶Activity。

    需要注意的是,该模式仅作用于与调用者处于同一个Task的情况(即第三方调用不起效果,在当前App的另一Task中的Activity实例也不会得到重用)。

    singleTask

    standardsingleTop非常不同,使用该模式启动的Activity在整个系统中仅允许存在一个单实例对象,存放在适当的Task中,再次呼出该Activity时将通过onNewIntent()方法重用实例,并将Task置顶。

    在所属App中呼出时

    该Activity会创建在App相同Task的堆栈顶,如果实例已存在,则堆栈中该实例之上的所有Activity都将被销毁。

    如果需要在新Task中创建该Activity,则需要声明taskAffinity指定Task名称:

    <activity
        android:name=".SingleTaskActivity"
        android:label="singleTask launchMode"
        android:launchMode="singleTask"
        android:taskAffinity="">
    

    在第三方App中呼出时

    该Activity会创建在新建Task中并置顶,如果该Activity所属App已启动并存在一个Task,则直接加到该Task中并置顶。

    如果已有一个实例存在于任意一个Task中,则该singleTask实例之上所有Activity都将被销毁,并将该Task置顶。

    singleInstance

    singleTask非常类似,系统中仅允许存在一个单实例对象。

    不同的是,持有该Activity的Task不可再存放其他Activity实例,该单实例Activity独占整个Task堆栈。

    从该Activity中呼出其他新Activity时,将自动创建新Task存放。

    需要注意的是,通过dumpsys activity显示,即便App中拥有两个Task,在任务管理器中依然只显示最近打开的那一个Task,无法自由来回切换到另一个Task中。(此时从启动器中启动App界面,可以调出主Task画面,但取而代之的是singleInstance的Task被放到了后台..)

    解决方法是通过声明taskAffinity,让任务管理器启用多任务模式:

    <activity
        android:name=".SingleInstanceActivity"
        android:label="singleInstance launchMode"
        android:launchMode="singleInstance"
        android:taskAffinity="">
    

    ※ 非必要时,不推荐使用该singleInstance模式

    参考原文

    Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstance

    相关文章

      网友评论

          本文标题:Android LaunchMode启动模式

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