![](/img/trans.png)
[英]Android - Sharing surfaceview between Activities or prevent drawing tasks to lock the main thread when switching activity
[英]Android switching between tasks
我正在嘗試找到一種在 android 中的任務之間切換的方法。
假設我有活動 A、B、C、D。
活動 A 和 B 在一個任務中(親和力)
而 C 和 D 正在執行另一項任務。
這是創建新任務的 C 活動的清單代碼。
<activity
android:name=".CActivity"
android:launchMode="singleTask"
android:taskAffinity="com.new" />
A、B 在一個任務中創建,C、D 在另一個任務中創建。 現在,我們只需要從 D 切換到 B 而不創建 B 的新實例。也可以從 A 切換到 D 而不創建 D 的新實例。
任務 1:A > B 任務 2:C > D
編輯:這兩個堆棧來自同一個應用程序。 我使用兩個的原因是一個是我的普通應用程序,另一個堆棧用於我的應用程序中的視頻通話功能。 這樣用戶就可以進行視頻通話並最小化窗口並使用應用程序的正常流程。
我認為你應該在活動 B 和活動 D 上設置標志FLAG_ACTIVITY_REORDER_TO_FRONT
。如果這些活動是以前創建的,它們將從活動堆棧中被帶到前面。
我假設您不想使用 Intent,因為每當您使用 Intent 移動到活動時,按返回鍵將移動到上一個活動(活動 C)。 在這種情況下,我建議您包含 FLAG_ACTIVITY_CLEAR_TOP 標志。 它將銷毀所有以前的活動,讓您移動到活動 A。
Intent a = new Intent(this,A.class);
a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(a);
或者,您可以嘗試使用 FLAG_ACTIVITY_REORDER_TO_FRONT 標志,它會在不清除任何活動的情況下移動到活動 A。
或者,如果您不想創建新實例,則
在 AndroidManifest.xml 中將活動的 launchMode 設置為 singleInstance
希望這可以幫助。
或者
1.) 使 B 成為“SingleTask”活動。 您可以在 Android 清單中執行此操作。 簡而言之,這意味着在此任務中永遠只存在 B 的一個“實例”。 如果 B 在被調用時已經在運行,那么它只會被帶到前面。 這就是你這樣做的方式。
<activity
android:name=".ui.MyActivity"
android:launchMode="singleTask"/>
但你不想只是把 B 帶到前面。 你想“回退”到 B,這樣你的堆棧看起來像
A--> B
2.) 將此標志添加到“開始”B 的意圖中。這可確保刪除 C 和 D。
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
現在,當“D”向 B 調用新的 Intent 時,B 將被恢復,C 和 D 將被刪除。 B 不會被重新創建,它只會調用 onNewIntent。
或者
您使用 StartActivityForResult() 開始活動
並根據您在活動中設置 ResultCodes 的條件.. 像這樣..
GO_TO_ACT_A=1; GO_TO_ACT_B=2;
並在所有 Activies onActivityResultMethod 檢查結果代碼..
if(resultCode==GO_TO_ACT_A){
finish(); //Assuming curently you are in Activity C and wanna go to Activity A
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.