[英]Activities in Android
關於Android應用程序中的活動,我有一個相當簡單的問題。 我還是個新手。
在我目前的Android應用程序中,我有大約10個活動。 如果其中一個活動已經遠離活動堆棧,我想重新打開它,是否可以調用:
Intent iLogin = new Intent(this,Login.class);
startActivity(iLogin);
如果它仍然有點令人困惑,我會舉一個例子。 應用程序隨活動1一起啟動。然后,用戶打開活動2.稍后,他打開活動3以執行操作。 執行操作后,我希望用戶返回活動1.是否可以調用上面的代碼? 它是從堆棧中獲取活動還是創建新活動? 如果不是,我怎樣才能從堆棧中獲取活動?
更新:我對回收活動感興趣,而不是每次創建新活動。 例如,並非所有活動都需要創建新活動。 其中一些只顯示數據,可以根據用戶請求刷新。
簡而言之:不,您的代碼片段會將新的Login
實例推送到活動堆棧。 請在developer.android.com上的Tasks和Back Stack文章中閱讀有關活動堆棧行為的更多信息。
由於后備堆棧中的活動永遠不會重新排列,如果您的應用程序允許用戶從多個活動啟動特定活動,則會創建該活動的新實例並將其彈出到堆棧中(而不是引入任何先前的活動實例)到頂部)。 因此,應用程序中的一個活動可能會多次實例化(甚至來自不同的任務),如圖3所示。
圖3:
在Managing Tasks下,還有一個可能的解決方案。 您可以向Intent添加一個標志 ,指定Android在堆棧上已存在活動時應該執行的操作。 我想說FLAG_ACTIVITY_REORDER_TO_FRONT
或FLAG_ACTIVITY_CLEAR_TOP
可能正是您所尋找的,但絕對可以瀏覽其他選項,因為可能有更適合您的需求。
或者,如果您的應用中的流量允許,您可以在用戶離開時完成活動。 例如,在您的示例中:如果用戶從活動#2導航到活動#3,則完成#2。 從#3按下后退按鈕將導致顯示活動#1,因為那將是堆棧頂部的活動。
我相信你可能想嘗試的標志FLAG_ACTIVITY_REORDER_TO_FRONT
使用addFlags()
的方法Intent
。
如果它已經存在於堆棧中,則會將Activity
置於堆棧頂部,如果不存在則創建一個新的。
可以調用上面的代碼嗎? 它是從堆棧中獲取活動還是創建新活動? 如果不是,我怎樣才能從堆棧中獲取活動?
答。 如果您使用此代碼,則會在堆棧上創建另一個ur 1st活動實例,而且不是沒有。
好。 這是基於上面的例子的答案:
我建議你使用startActivityForResult()
從Activity 1調用Activity 2
在這里,Activity 2將表現為子活動...你可以setResult並在第二個Activity成功完成其任務時調用finish()
...
但在finish()
之前添加一個類似於的布爾值:
i.putExtra("passed2nd", true);
這將表明用戶已經完成了第二次活動
現在,你應該在第一個活動中覆蓋onActivityResult()
,
在這里你可以檢查請求代碼並從第二個活動中檢索布爾額外的..
現在,重要的部分:根據布爾值是否為真,你可以決定使用帶有不同請求代碼的startActivityForResult()
調用第三個活動,
此外,在你的onActivityResult()
,你可以再次檢查請求代碼,並在活動3結束時按照你的意願行事
所以現在當第3次活動成功結束時,控制將返回到第1次活動
這是一個讓你開始的例子 。
我建議使用FLAG_ACTIVITY_CLEAR_TOP
Activity 1 -> Activity 2 -> Activity 3
所以在Activity 3
你想回到Activity 1
嗎? 我假設您不希望Activity 2
仍在運行,因此您應該使用FLAG_ACTIVITY_CLEAR_TOP
以便中間的所有內容都將關閉
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.