<h2 align = "center">電話應用熱啟動用戶體驗優化</h2>
熱啟動定義:在最底層Activity,點擊返回按鈕;Activity消失后,點擊桌面圖標或者從最近任務中打開,應用MainActivity重新啟動,這次啟動屬于熱啟動。
點擊返回按鈕,默認會觸發Activity的finish操作,但是不會殺掉進程。所以應用熱啟動時間,可以認為是創建第一個Activity的時間。加快MainActivity的創建和顯示,就是熱啟動優化的核心。
1. 對比其他廠商樣機和第三方App
- 其他樣機,如小米、魅族,在電話應用的最底層Activity,點擊返回按鈕,沒有觸發Activity的finish。
- 第三方App,如微信、QQ,在應用首Activity,點擊返回按鈕,也沒有觸發Activity的finish。
- 可以推測,上述應用,都對Back鍵的邏輯進行了改寫,按Back鍵和Home的邏輯差不多,僅僅是將應用切換到后臺,并不會銷毀Activity。
2. 電話應用使用上述辦法優化熱啟動前后對比
將電話最底層Activity的返回按鈕邏輯,修改成和home一樣時的內存變化如下。
1) 修改前
按Back退出應用

點擊桌面圖標啟動應用

2) 修改后
按Back退出應用

點擊桌面圖標啟動應用

從上述現象可以得出:電話的主界面Activity鎖占據的內存不大,大概1~2M左右。修改后,點擊back和重新打開,應用穩定后內存幾乎沒變化。所以在用戶點擊Back按鈕時,完全可以保留該Activity,達到快速熱啟動的目的。
3. 具體實現
0.
代碼實現如下
@Override
public void onBackPressed() {
if (!moveTaskToBack(true)) {
super.onBackPressed();
}
}
1.
Android本身的設計,就是允許App自定義Back的行為的,所以,理論上所有類型的App都可以采用該方案優化。
2.
主界面占據內存比較少的應用可以直接添加代碼對應代碼即可
3.
對于在首界面占用內存資源比較多的應用,應該檢查Activity 和 Fragment 的 destroy 方法,將釋放資源的操作移動到 pause 或 stop,然后再檢查create方法,將加載資源操作移動到 resume 或 start 。