美文网首页
Android taskAffinity和allowTaskRe

Android taskAffinity和allowTaskRe

作者: zivxia | 来源:发表于2018-04-21 16:44 被阅读509次
    image.png

    我们都知道Activity中有任务栈的概念,那什么是Activity所需的任务栈呢,这就要从一个参数说起了,TaskAffinity,可以翻译为任务的相关性,这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有Activity的所需的任务栈名字都为应用的包名。当然,我们可以单独的给每一个Activity指定单独的任务栈,这就需要通过taskAffinity来指定了,当然不能与应用包名相同( 不然指定跟没指定效果是一样的)。

    • 1.默认情况下,Activity的任务栈与启动它的Activity的任务栈是一样的,如果想要单独的给某个Activity指定单独的任务栈,这就需要设置TaskAffinity属性以及设置启动模式为singleTask,或者在代码中设置为FLAG_ACTIVITY_NEW_TASK
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    

    这样才能单独的给Activity指定任务栈。
    下面可以通过一个例子来看看:

    1.只设置taskAffinity情况
    <activity
           android:name=".view.MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
    </activity>
    <activity
           android:name=".view.ThirdActivity"
           android:taskAffinity=".ThirdActivity">
    </activity>
    

    然后在MainActivity中启动ThirdActivity

    Intent intent = new Intent(MainActivity.this,ThirdActivity.class);
    startActivity(intent);
    

    然后在来看看任务栈的情况


    image.png

    可以知道,ThirdActivity是在MainActivity所在的任务栈中,所以说,单独设置android:taskAffinity不会产生任何作用。

    2.设置Activity启动模式为singleTask或者设置FLAG_ACTIVITY_NEW_TASK,再来看看任务栈的情况,代码就不贴出来了,
    Intent intent = new Intent(MainActivity.this,ThirdActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    

    或者

       <activity
               android:name=".view.ThirdActivity"
               android:taskAffinity=".ThirdActivity"
               android:launchMode="singleTask">
        </activity>
    
    
    image.png

    可以看到ThirdActivity在.ThirdActivity任务栈中,MainActivity在com.example.ziv.myapplication任务栈中。

    • 2.Activity 设置
    allowTaskReparenting = "true"
    

    在这种情况下,Activity 可以从其启动的任务移动到与其具有关联的任务(如果该任务出现在前台)。
    例如,假设将报告所选城市天气状况的 Activity 定义为旅行应用的一部分。 它与同一应用中的其他 Activity 具有相同的关联(默认应用关联),并允许利用此属性重定父级。当您的一个 Activity 启动天气预报 Activity 时,它最初所属的任务与您的 Activity 相同。 但是,当旅行应用的任务出现在前台时,系统会将天气预报 Activity 重新分配给该任务并显示在其中。

    相关文章

      网友评论

          本文标题:Android taskAffinity和allowTaskRe

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