如果妳的平臺是面向Android3.0(API level 11),那麽恭喜妳,壹個函數就可以搞定:
moveTaskToFront
/reference/android/app/ActivityManager.html#moveTaskToFront(int, int)
如果妳和我壹樣苦逼的在用2.2的平臺,那麽就要稍微麻煩點了,基本上是用taskAffinity + FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_SINGLE_TOP。
先來看壹下sdk怎麽說的:
1. taskAffinity:
SDK說,如果用帶FLAG_ACTIVITY_NEW_TASK標誌來啟動壹個activity,並且這個activity與當前運行的另壹個task(A)的affinity名字相同,那麽就這個activity就會在那個task(A)裏啟動。
Ok,到這還不行,人家沒說會把Task_A帶到前臺,接著看另壹個Flag
2. FLAG_ACTIVITY_NEW_TASK
好了,重點來了:如果Task_A中已經有了Activity_2,這時候如果以FLAG_ACTIVITY_NEW_TASK來start Activity_2,那麽這個Task_A就會被帶到前臺。
好了,現在Task_A已經可以到前臺了,剩下最後壹步:Activity_2不能創建兩次,這就要求同時使用下面這個flag:
3. FLAG_ACTIVITY_SINGLE_TOP
如果Activity_2在Task的頂端,那麽這個Activity_2就不會被再此創建,而是走onNewIntent.
至此,結合上面3個特性,問題得以解決。結合代碼,流程如下:
1. 在androdiManifest.xml中添加Activity_2的taskAffinity name與Task_A相同(也就是與Activity_1的taskAffinity名字相同),如android:taskAffinity = "android.task.calendar"。
2. 在Task_B啟動前,Activity_1先啟動Activity_2並要求返回結果,startActivityForResult().
3. Task_B中的Activity_4取得所需數據後,保存好(intent,或其他方法),然後startActivity(Activity_2),並帶上(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP)標誌。
4. Task_A被帶到前臺,並且調用到Activity_2::onNewIntent().
5. Activity_2取得之前保存的信息(從Intent或其他地方),調用setResult(),然後finish().
6. Activity_1中的onActivityResult()響應,得到返回結果。