2015-04-27 37 views
0

我想知道什麼是正面和反面當您嘗試打開一個新的活動與android並通過調用完成立即銷燬前一個。贊成和反對呼籲結束

人們認爲這是一個壞主意,因爲Android可以在內存使用過多時關注活動並放棄它們,但是如果我一旦進入該活動並且可能用戶再也不會回來,那又如何呢?這是一個不好的選擇?

同樣通過完成活動,後退按鈕的歷史記錄是「清晰的」,所以它不會回到該活動(只有當您的用戶流量需要返回時,我認爲您不應該調用finish)。

而在內存方面,最好是殺死活動結束還是讓android在後臺有這個活動誰知道多久時間

我覺得你有點幫助系統GC關閉你的活動,並確保用戶在離開應用程序之前不需要點擊後退按鈕100次。

那麼你怎麼看?更好地致電完成

回答

1

我想知道當您嘗試使用android打開新活動並通過調用完成銷燬上一個活動時有什麼優點和缺點。

您希望用戶通過BACK按鈕返回到上一個活動,或者您沒有。

  • 如果你想在用戶返回到通過返回以前的活動,不叫finish()

  • 如果你不想讓用戶返回到通過返回以前的活動,也有許多的選擇,取決於你在那裏做用戶去當用戶按下BACK

人們認爲這是一個壞主意b因爲Android可以在有太多內存的情況下處理活動並丟棄它們

不,Android does not do this

更好地殺死活動完成或離開android有這個活動在後臺誰知道多久的時間?

使活動執行onTrimMemory()並根據需要減少其內存佔用情況是「更好的」。不要損害用戶對BACK按鈕的期望。

你怎樣的幫助系統GC已關閉的活動,並確保用戶不會需要走出應用的前100次點擊返回按鈕

很少有用戶會「點擊後退按鈕100次」。他們將按HOME,或調出總覽屏幕(a.k.a.,最近的任務列表),或通過其他方式導航到另一個應用程序。

現在,也就是說,是您想要清除任務(返回堆棧)的次數,再次着眼於爲用戶提供邏輯流程。例如,在一個電子郵件應用程序:

  • 用戶啓動應用程序,以及一個新的創建任務,與用戶進入應用的啓動活動,這顯示在用戶的收件箱中的郵件(A)

  • 用戶點擊「搜索」動作欄項目,造就了搜索活動,在那裏他們可以通過各種標準(B)

  • 用戶填寫搜索條件,點擊搜索「GO!」按鈕,該按鈕進行搜索並顯示匹配的電子郵件消息(C)

  • 用戶敲擊上的電子郵件消息,帶來了一個電子郵件閱覽活性(d)

  • 用戶敲擊一個「刪除」動作欄項目,這應該刪除該消息並返回用戶...某處

如果您認爲用戶應該返回到搜索結果(C),你可以調用finish()在D.然而,如果您認爲用戶應該返回到收件箱(A),您可以撥打startActivity()與A適配Ë標誌(例如,Intent.FLAG_ACTIVITY_CLEAR_TASK),明確了回來堆棧和用戶返回到A.

總之:做呼叫finish()處理堆空間;改爲執行onTrimMemory()。但是,如果導航要求finish(),然後使用它。

+0

這是一個很好的解釋,將'完成()'清除內存中的任何引用,否則它們將一直存在,直到我用'Intent.FLAG_ACTIVITY_CLEAR_TASK'開始一個新的活動?將所有圖像加載到imageview中怎麼樣?他們如何獲得卸載和免費?如果他們在'onDestory'或'onTrimMemory'上手動完成,它會形成我嗎? – max246

+0

@ max246:「將完成()清除內存中的任何引用」 - 它應該允許活動最終被垃圾收集。 「他們應該在onDestory上手動完成還是在onTrimMemory上完成?」 - 既不。應該在他們的活動結束後將小部件垃圾收集起來。如果你想主動做些事情,你可以在'onTrimMemory()'中自己做。 – CommonsWare