作Android好久了, 零零碎碎的坑踩了很多, 也有踩了又踩的. 回憶收集一下以備自查, 也讓你們能瞄一眼.測試
RemoteView可能形成內存泄露, 這個坑是幾年前踩的.spa
當時APP作了很是系統話通知欄模塊. 上線後發現不少用戶發通知時總奔潰. 跟了好久, 不明因此. 內存
一日發現, 測試用的手機,一個多月沒關機, 發通知欄特別卡. 拿來dump一下, 發現用於通知欄的RemoteView佔用內存巨大. rem
扒來系統源碼找到緣由, 根源在於RemoteView.源碼
在每次發動通知前, 最好從新構造一個RemovteView, 不然可能形成內存泄露io
由於RemoteView, 事實上, 並非Veiw. 而是一個"操做記錄表". 內存泄露
它把全部用戶的對於veiw的操做當作"Action"記錄下來, 最終由Android的通知欄來模塊來處理這些記錄. 完成APP的通知行爲.系統
RemovteView這個"操做記錄表"不會remove任何記錄. 每次通知, 都是從第一條Action, 一直執行到最新添加的Action.
這使將內存只增不減.同時通知欄顯示卡頓. 由於從RemovteView 建立開始時全部的Action都會被執行. 太多必然卡頓.