使用android taskaffinity

Akh*_*ani 4 android android-activity

我正在阅读有关taskaffinity的内容,并创建了一个包含以下活动的演示应用:

  • 一个
  • B ===> taskaffinity,com.ando
  • C
  • D ===> taskaffinity,com.ando
  • Ë

据说,具有相同taskaffinity的活动秘密打开另一个的单个实例.

所以,我把每个活动的onResume登录到任务ID.如果它创建了单个实例,那么当我打开D时它为什么不执行onBesume,反之亦然.

我阅读开发者网站和其他帖子,但仍然没有得到如何使用taskaffinity及其使用,为什么我们不应该使用singleInstance?

表现:

 <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.danroid.taskaffinity.A"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <!-- android:taskAffinity="com.ando" -->
    <activity
        android:name="com.example.danroid.taskaffinity.B"
        android:label="@string/app_name"
        android:taskAffinity="@string/task_affinity" >
    </activity>
    <activity
        android:name="com.example.danroid.taskaffinity.C"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name="com.example.danroid.taskaffinity.D"
        android:label="@string/app_name"
        android:taskAffinity="@string/task_affinity" >
    </activity>
    <activity
        android:name="com.example.danroid.taskaffinity.E"
        android:label="@string/app_name" >
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

Dav*_*ser 30

当您调用startActivity()从一个转换Activity到另一个时,如果未Intent.FLAG_ACTIVITY_NEW_TASKIntent标志中设置,则新的Activity将在同一任务中启动,而不管其值是什么taskAffinity.

但是,如果你设置Intent.FLAG_ACTIVITY_NEW_TASKIntent标志,新Activity仍然可以在同一个任务开始,如果新的Activity具有相同taskAffinitytaskAffinity(这是由确定的任务的taskAffinityActivity在任务).但是,如果新的Activity有不同的taskAffinity,新的Activity将在新任务中启动.

根据您的描述,如果您Intent.FLAG_ACTIVITY_NEW_TASK在开始新设置时没有设置Activity,那么您的所有活动将最终处于同一任务中.