2017-07-13 82 views
0

我正在創建一個應用程序,讓用戶通過相當長的線性數據捕獲過程。每個活動都會爲需要輸入數據的新主題導致新的活動。問題是,一些活動有許多或大的位圖,或許多imageButtons。當用戶進入下一個活動時,當前一個放置一個後臺堆棧,內存不會被清理。Android:減少BackStack內存使用量

我正考慮在用戶轉到下一個活動時調用'finish()',然後重寫'onBackPressed()'以在用戶需要返回並在其中更改值時重新創建之前的活動。有沒有比這個更好的建議?

+1

您在活動中如何使用位圖?請將您的代碼發佈到 –

+1

您可以將位圖存儲在「軟」緩存中,刪除onStop中的硬引用並嘗試從onStart中的緩存中加載它們 – lelloman

+0

@an_droid_dev許多圖像都是佈局的一部分,因此ImageView或佈局xml文件中的按鈕。其他的是用戶在使用應用程序時拍攝的照片。 – Zee

回答

1

您考慮的解​​決方案當然是在正確的軌道上。

我唯一的補充(重新創建活動,當你需要回到他們)是,你不一定需要很多活動。

從我的理解你需要許多佈局,每個佈局都有相關的資源。我會做的是:

  • 創建Stage數據類,對號入座佈局,位圖的ID等
  • 創建List<Stage>與完整的故事
  • 創建一個知道如何顯示一個階段一個活動從列表中,並遍歷到其他階段。在這裏你可以覆蓋後退按鈕來充當舞臺遍歷。

查看The Transitions Framework瞭解在上述階段之間遍歷時如何製作視圖。如果您至少在某些視圖中使用了相同的ID,它們將獨立移動,而其他視圖將淡出或進入。

+0

謝謝auval!這聽起來像是一個很酷的想法。但是,這樣做的好處與僅僅重新創建活動相反呢?對不起,如果它是一個愚蠢的問題,我還是很新的。 – Zee

+0

創建許多活動只是很多重複的工作,而且很麻煩。只需修改佈局,就可以使用佈局轉換爲佈局的各個部分製作動畫(而不僅僅是在整個屏幕上製作動畫,就像在Activity中一樣)。有更多的優點。 – auval

+0

不幸的是,我已經創建了所有的活動。我想我會嘗試重寫onBackPressed(),當我有時間的時候我會嘗試這個實現 - 這聽起來很酷。 – Zee