論思維的重要性--Android中activity的管理

一般activity使用stack來管理,但是因爲項目中有清除前面幾個頁面的需求,也有可能全部清除相關的頁面,使用stack侷限性比較高,他只能從棧頂一次彈出,我想彈出除當前頁的其他頁面,可以通過list集合便利解決,所以我使用了list來單獨管理這類頁面。每次加載頁面就添加到list,關閉就remove,對於彈出幾個頁面就便利list,但是如果跳頁的時候把相關的頁面全部清空,就對導致跳轉的頁面相當於項目的啓動頁,出現閃屏現象。當然,這並不是crash,不過給用戶的感覺不是很好,所以我做了相關的優化。

給跳轉的intent添加flag

 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);//清空棧需與FLAG_ACTIVITY_NEW_TASK一起使用
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//相當於singleTask
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//相當於standard

這個方式解決了閃屏的問題,不過有來了新的問題:我之前對某類activity使用list來管理,這種添磚方式不會手動的去清除list中的數據,導致影響了相關邏輯,針對這個問題的解決方式有兩種:

  1. 手動將list置空,這樣會重新創建list,就不會出問題了。但是頁面都沒有finish,如果遍歷finish掉的話就有出現了閃屏頁。所以不推薦這種方式
  2. 通過activity的生命週期管理list,我們項目中都有管理activity的棧,這個棧是通過生命週期統一管理的,我通過判斷activity是不是某類頁面,如果是就再activity創建的時候添加,再finish的時候remove掉,這樣就完美的解決了問題了。

這個問題解決的時間挺久的,主要是思路不夠清晰,對任務棧不夠數量,總結歸納一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章