Toolbar 涉 Menu 循環

序言

一個 Activity,兩個 Fragment,木有 For/While/If/Service 或任何特效處理,僅有簡單的文本列表展示。可機身卻如此燙手(雙四核,RAM-2GB,現已是低端配置機),嚇得偶敲多幾行代碼壓壓驚。當然遇到這種情況定當馬上停止後臺所有運行程序,畢竟三星機可是擁有超強自爆技能的武器 。


正文

1. 檢查 CPU 運行狀況及分析

CPU 運行狀況圖

Memory 運行軌跡呈重複小駝峯狀,很明顯當前頁部分操作正在循環執行,且某部分視圖進行重繪,致使 CPU 增長。

2. 源碼註釋及 DeBug 分析

  • 嘗試:註釋當前頁 onCreate() 中初始視圖及數據操作,(正常)排除父類 BaseActivity 問題
  • 嘗試:僅註釋初始數據操作,(非正常)排除數據判斷循環操作問題
  • 嘗試:註釋初始視圖,除 BaseActivity 下的通用 TooBar,(非正常)確定 Toobar 嫌疑最大
  • DeBug:確認 Toolbar 相關操作處於循環狀態,並確認觸發循環操作位置如下

BaseActivity initToolBar()

這裏寫圖片描述

3. 發現並解決問題

使用 invalidateOptionsMenu() 更新 Menu 下的 Option 選項內容同時更新下 Toobar 上的信息,貌似沒有啥不妥的地方。錯就錯在更新 Toobar 信息時順帶調用了 setSupportActionBar(),千萬別問爲什麼,看源碼哈。

setSupportActionBar() 源碼

所以還是乖乖的直接對已實例化的 Toobar 進行操作就行了。結論:onPrepareOptionsMenu() 會隨着 setSupportActionBar() 的引用而被調用。 雖然只是個不起眼的小問題,但還是放心不下說出來了呢,免得自己又犯傻。

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