2014-01-27 18 views
3

我讀約taskaffinity &的創建的演示應用程序具有以下活動:使用Android taskaffinity

  • 乙===> taskaffinity,com.ando
  • Ç
  • d = ==> taskaffinity,com.ando
  • Ë

據令狀十,那相同taskaffinity的活動偷偷打開另一個的單個實例。

因此,我把日誌放在每個活動的Resume上來看任務ID。如果它創建單個實例,那麼當我打開D時爲什麼不執行onResume的B,反之亦然。

我讀了開發者網站和其他帖子,但還沒有得到如何使用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> 
+0

請張貼您的清單。目前還不清楚你使用的是launchMode。 –

+0

@DavidWasser我沒有定義任何啓動模式。 –

+0

你如何獲得任務ID? –

回答

23

當你打電話startActivity()從一個Activity到另一個過渡,如果您沒有設置在Intent標誌Intent.FLAG_ACTIVITY_NEW_TASK,新Activity將在同一個任務的開始,無論值爲taskAffinity

但是,如果你在Intent標誌設置Intent.FLAG_ACTIVITY_NEW_TASK,新Activity仍然可以在同一個任務開始如果新Activity具有相同的taskAffinity作爲任務的taskAffinity(這是由taskAffinity確定任務中的根Activity)。但是,如果新的Activity有不同的taskAffinity,新的Activity將啓動一個新的任務。

根據您的描述,如果您在開始新的Activity時未設置Intent.FLAG_ACTIVITY_NEW_TASK,那麼您的所有活動都將以相同的任務結束。