精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android應用內存泄露分析、改善經驗總結

移動開發 Android
通過這幾天對好幾個應用的內存泄露檢測和改善,從結果來看我分析和改善內存泄露的方法是對的,這個過程并不復雜,所以可以梳理總結出來作為分享。

前言

通過這幾天對好幾個應用的內存泄露檢測和改善,效果明顯:

  • 完全退出應用時,手動觸發GC,從原來占有內存100多M降到低于20M;
  • 手動觸發GC后,通過adb shell dumpsys meminfo packagename -d查看Activity和View的數量也趨近于0了(沒有做到歸零是因為SDK中存在內存泄露,需要中間層去處理);
  • 發現了一個SDK中的內存泄露(Android InputMethodManager 導致的內存泄露及解決方案);
  • 發現一個MTK Webview的內存泄露(org.chromium.android_webview.AwPasswordHandler.java中private static AwPasswordHandler sInstance = null導致的內存泄露)。

從結果來看我分析和改善內存泄露的方法是對的,這個過程并不復雜,所以可以梳理總結出來作為分享。

原則

對于性能問題,分析和改善有必要遵循以下原則:

  • 一切看數據說話,不能跟著感覺走,感覺哪有問題就去改,很有可能會適得其反;
  • 性能優化是一個持續的過程,需要不斷地改善,不要想著一氣呵成;
  • 對于性能問題,不一定必須要改善,受限于架構或者其它原因某些問題可能會很難改善,必須要先保證能用,再才考慮好用。
  • 改善后一定要驗證,任何一個地方的改動都需要驗證,避免因為改善性能問題導致其它的問題。

步驟

下面是我在針對內存泄露這個性能問題上的解決步驟:

優先處理常見的內存泄露問題

首先解決常見的內存泄露問題,這個過程可以借助Android Studio的Analyze-Inspect Code對代碼做靜態分析,常見的內存泄露問題有:

  • 非靜態內部類導致的內存泄露,比如Handler,解決方法是將內部類寫成靜態內部類,在靜態內部類中使用軟引用/弱引用持有外部類的實例,eg:
  1. static class ExerciseHandler extends Handler{ 
  2.  
  3.           private SoftReference<ExerciseActivity> exerciseActivitySoftReference = null
  4.  
  5.   
  6.  
  7.           public ExerciseHandler(ExerciseActivity exerciseActivity){ 
  8.  
  9.               exerciseActivitySoftReference = new SoftReference<ExerciseActivity>(exerciseActivity); 
  10.  
  11.           } 
  12.  
  13.   
  14.  
  15.           @Override 
  16.  
  17.           public void handleMessage(Message msg) { 
  18.  
  19.               ExerciseActivity exerciseActivity = exerciseActivitySoftReference.get(); 
  20.  
  21.               if(null != exerciseActivity){ 
  22.  
  23.                   super.handleMessage(msg); 
  24.  
  25.                   switch (msg.what) { 
  26.  
  27.                       case MSG_XX: 
  28.  
  29.                           exerciseActivity.***; 
  30.  
  31.                           break; 
  32.  
  33.                       default
  34.  
  35.                           break; 
  36.  
  37.                   } 
  38.  
  39.               } 
  40.  
  41.           } 
  42.  
  43.       }  
  • IO操作后,沒有關閉文件導致的內存泄露,比如Cursor、FileInputStream、FileOutputStream使用完后沒有關閉,這種問題在Android Studio 2.0中能夠通過靜態代碼分析檢查出來,直接改善就可以了;
  • 自定義View中使用TypedArray后,沒有recycle,這種問題也可以在Android Studio 2.0中能夠通過靜態代碼分析檢查出來,直接改善就可以了;
  • 某些地方使用了四大組件的context,在離開這些組件后仍然持有其context導致的內存泄露,這種問題屬于共識,在編寫代碼的過程中就應該按照規則來,使用Application的Context就可以解決這類內存泄露的問題了,至于什么情況下應該使用四大組件的Context,什么時候應該使用Application的context可以參見下表: 

 

 

application使用場景 

application使用場景

備注:大家注意看到有一些NO上添加了一些數字,其實這些從能力上來說是YES,但是為什么說是NO呢?下面一個一個解釋:

1、數字1:啟動Activity在這些類中是可以的,但是需要創建一個新的task,一般情況不推薦;

2、數字2:在這些類中去layout inflate是合法的,但是會使用系統默認的主題樣式,如果你自定義了某些樣式可能不會被使用;

3、數字3:在Receiver為null時允許,在4.2或以上的版本中,用于獲取黏性廣播的當前值。(可以無視);

4、ContentProvider、BroadcastReceiver之所以在上述表格中,是因為在其內部方法中都有一個context用于使用。

還有一種不屬于內存泄露,但在分析內存泄露的問題時應該一并解決:同一個APP,將圖片放在不同的drawable文件夾下,在相同的設備上占用的內存情況不一樣,具體可以參見:關于Android中圖片大小、內存占用與drawable文件夾關系的研究與分析。解決這個問題遵循以下原則就可以了:1、UI只提供一套高分辨率的圖,圖片建議放在drawable-xxhdpi文件夾下(放在xxxhdpi或者更高分辨率的文件夾下沒有必要,權衡利弊,照顧主流設備即可),這樣在低分辨率設備中圖片的大小只是壓縮,不會存在內存增大的情況;2、涉及到桌面插件或者不需要縮放的圖片,放在drawable-nodpi文件夾下,這個文件夾下的圖片在任何設備上都是不會縮放的。

通過工具檢查程序運行后的內存泄露

通過上面的步驟,應用中的大部分內存泄露問題都能夠得到解決,還有一些內存泄露,需要運行程序,分析運行后的內存快照來解決,比如注冊之后沒有反注冊、類中的靜態成員變量導致的內存泄露、SDK中的內存泄露等。解決這類問題可以分兩步進行:

  • 通過內存泄露檢測工具先定位是哪有問題,內存泄露的檢測有兩種比較便捷的方式:1、一種是使用開源項目Leakcanary,需要添加到代碼中,運行后生成分析結果;2、另一種方式是使用adb shell dumpsys meminfo packagename -d命令,在進入一個界面之前查看一遍Activity和View的數量,在退出這個界面之后再查看一遍Activity和View的數量,對比進入前和進入后Activity和View數量的變化情況,如果有差異,則說明存在內存泄露(在使用命令查看Activity和View的數量之前,記得手動觸發GC)。 

 

 

 

備注:在Android Studio中,可以通過如下方式獲取當前選中進程的內存信息: 

 

 

 

  • 然后通過MAT取程序運行時的內存快照做詳細分析,對于MAT的使用,網上有很多優質的文章,比如:Android 性能優化之使用MAT分析內存泄露問題,在使用MAT前,有必要知道這幾點:1、 不要指望MAT明確告訴你哪里存在內存泄露,這需要你根據上一步驟首先定位到可能存在內存泄露的類,然后借助MAT確認是否真的存在內存泄露,具體哪個地方存在內存泄露;2、借助Retained Size分析某一個類及與之相關的實例所消耗的內存,如果這個類的Retained Size比較大,優先分析;3、檢查某個類是否存在內存泄露時,排除其軟/弱/虛引用,右鍵某個類→Merge Shortest Paths to GC Roots→exclude all phantom/weak/soft etc.references。

驗證改善效果

根據個人經驗,我一般是這樣驗證改善效果的,運行程序,各個功能跑一遍,確保沒有改出問題,完全退出程序,手動觸發GC,然后通過adb shell dumpsys meminfo packagename -d查看Activivites和Views的數量是否趨近于0;如果不是0,通過Leakcanary檢查可能存在內存泄露的地方,繼續通過MAT分析,周而復始,改善到自己滿意為止。

推薦閱讀

  • Speed up your app
  • Android 性能優化之使用MAT分析內存泄露問題
責任編輯:龐桂玉 來源: 安卓開發精選
相關推薦

2010-01-27 18:12:14

Android dia

2010-01-25 14:25:33

Android Int

2009-11-17 11:24:00

PHP應用技巧

2010-01-26 13:28:11

Android開發要點

2010-05-06 17:30:56

Oracle查詢語句

2009-12-31 10:21:53

Silverlight

2009-10-15 09:27:00

2009-10-27 10:46:27

ADSL接入技術

2010-01-06 15:52:11

軟交換技術

2010-02-02 15:44:18

C++遍歷集合

2009-09-16 17:13:54

學習Linq

2009-09-29 16:32:11

OJB Hiberna

2009-08-19 09:24:43

AJAX引擎經驗總結

2010-01-25 13:37:07

Android傳感器

2010-04-28 17:14:38

Oracle EXPL

2009-10-23 09:43:44

光纖接入網

2010-09-13 10:52:37

CSS定位

2011-07-08 13:15:52

JSP

2009-08-20 17:35:47

Servlet和JSP

2009-10-22 15:07:12

綜合布線工程
點贊
收藏

51CTO技術棧公眾號

国产日韩欧美在线一区| 日韩理论在线| 调教+趴+乳夹+国产+精品| 福利视频一区二区三区| 亚洲男人第一av| 天堂在线精品| 欧美日韩亚洲综合在线| 国产精品久久久影院| 天天操天天爱天天干| 久久在线91| 久久的精品视频| 无码精品一区二区三区在线播放| 欧美成人精品一区二区男人小说| 一区在线中文字幕| 国产在线精品二区| 中文字幕在线播放不卡| 国内精品美女在线观看| 伊人一区二区三区久久精品| 国产chinesehd精品露脸| 亚洲高清黄色| 亚洲va中文字幕| 亚洲国产日韩综合一区| 色噜噜一区二区三区| 极品少妇一区二区| 热re99久久精品国产66热| 欧美日韩午夜视频| 精品国产123区| 亚洲国产精品中文| 成人高清在线观看视频| 成人久久网站| 在线观看亚洲成人| 成人毛片视频网站| 日本在线视频中文有码| 国产精品久久久久9999吃药| 欧美日韩一区在线视频| 亚洲精品国产精| 狠狠色丁香婷婷综合久久片| 国产成一区二区| 91九色丨porny丨肉丝| 欧美国产三级| 久久影视电视剧免费网站清宫辞电视 | 性生活在线视频| 网友自拍亚洲| 欧美视频在线观看免费网址| 精品视频在线观看一区| 免费电影视频在线看| 亚洲欧美影音先锋| 亚洲午夜精品久久| 在线免费av电影| 中文字幕国产一区| 五月天亚洲综合| 国产高清视频免费最新在线| 久久亚洲影视婷婷| 蜜桃视频在线观看成人| 青青青草原在线| 91免费在线看| 欧美系列一区| 高清av电影在线观看| 国产情人综合久久777777| 欧美午夜精品久久久久久蜜| 男人天堂网在线观看| 26uuuu精品一区二区| 九九99玖玖| 日本免费一区视频| 久久综合九色综合97婷婷女人| 久久精品magnetxturnbtih| 污视频网站在线播放| 99re在线精品| 欧美一区二区高清在线观看| 国外av在线| 日本一二三四高清不卡| 亚洲精品一区国产精品| 免费高清完整在线观看| 尤物av一区二区| 97超碰国产精品| aa级大片免费在线观看| 欧美性色视频在线| 中文字幕 91| 国内精品视频| 精品国精品国产| 亚洲国产欧美视频| 日本黄色精品| 欧美高跟鞋交xxxxhd| 在线观看免费国产视频| 久久精品男女| 91亚洲人电影| 香蕉视频911| 欧美国产禁国产网站cc| 法国空姐在线观看免费| 爱搞国产精品| 欧美日韩亚洲国产综合| 免费黄视频在线观看| 日韩超碰人人爽人人做人人添| 国产亚洲欧洲黄色| 免费在线黄色片| 免费一区视频| 91精品免费看| 手机在线精品视频| 中文字幕一区二区不卡| 日韩a级在线观看| 欧亚一区二区| 欧美一区二区三区电影| 欧美黑人欧美精品刺激| 亚洲激情中文在线| 日本成人免费在线| av网站免费大全| 久久久久久久久免费| 日韩一级片一区二区| 日韩毛片免费观看| 精品国产人成亚洲区| 免费一级特黄3大片视频| 欧美午夜a级限制福利片| 国产精品扒开腿做| 亚洲黄色在线免费观看| 中文幕一区二区三区久久蜜桃| 国产日韩亚洲欧美在线| 韩国理伦片久久电影网| 亚洲精品二三区| 欧美成人国产精品高潮| 男人的j进女人的j一区| 精品国产乱码久久久久久108| 久久久久久久久免费视频| 色综合久久久久综合99| 亚洲美女在线播放| 欧美在线网址| 国产欧美日韩丝袜精品一区| 蜜桃视频在线入口www| 亚洲国产一区视频| 中文字幕乱码在线人视频| 日韩大片在线播放| 国产91网红主播在线观看| 少妇喷水在线观看| 亚洲午夜激情网站| 日本黄色三级网站| 亚洲乱码电影| 国产日韩精品在线播放| 国产三级在线看| 天天综合天天做天天综合| 精品国产免费久久久久久婷婷| 国产精品久久久久久久免费观看| 国产精品久久久久久久久久久久| 欧美777四色影视在线| 欧美视频在线视频| 800av在线播放| 日韩午夜黄色| 久久精品国产第一区二区三区最新章节 | 奴色虐av一区二区三区| 91色综合久久久久婷婷| 日韩国产欧美亚洲| 色天下一区二区三区| 91av国产在线| 青青草免费在线| 欧美日韩在线第一页| 亚洲调教欧美在线| 国产精品视区| 欧美日韩精品一区| 久久夜夜操妹子| 亚洲人成绝费网站色www| 日韩精品久久久久久免费| 久久综合九色欧美综合狠狠| 麻豆av免费在线| 禁断一区二区三区在线| 国产精品自产拍在线观看中文 | 欧美国产一区二区| 亚洲欧美在线精品| 午夜精品一区二区三区国产| 91视频九色网站| 色网在线观看| 亚洲激情视频在线播放| 日韩人妻精品中文字幕| 国产偷国产偷亚洲高清人白洁| 中文字幕第21页| 91精品国产调教在线观看| 99精品在线直播| yellow在线观看网址| 亚洲美女性视频| 这里只有精品国产| 亚洲人妖av一区二区| 无码人妻丰满熟妇啪啪网站| 国产日韩免费| 色视频一区二区三区| 亚洲人成777| 欧美激情久久久久| 三级做a全过程在线观看| 欧美影视一区二区三区| 少妇久久久久久被弄高潮| 99久久精品国产毛片| 久久综合伊人77777麻豆最新章节| 偷偷www综合久久久久久久| 国产传媒欧美日韩| 一二区成人影院电影网| 久热国产精品视频| 可以在线观看的黄色| 538在线一区二区精品国产| 日韩精品视频免费播放| 中文av一区特黄| 国产高潮视频在线观看| 男人的天堂亚洲一区| 日韩网站在线免费观看| 成人午夜国产| 精品国产aⅴ麻豆| 91精品一区| 欧美在线性视频| 性网站在线观看| 国产一区二区三区在线观看网站 | 亚洲激情免费观看| 国产裸体永久免费无遮挡| 狠狠久久五月精品中文字幕| 北条麻妃在线观看视频| 91美女视频网站| 无码人妻少妇色欲av一区二区| 米奇777在线欧美播放| 国产亚洲精品久久久久久久| 精品国产精品| 极品尤物一区二区三区| 日韩欧美中文字幕在线视频| 国产精品久久久亚洲| aa视频在线观看| 久久综合伊人77777尤物| 欧美黄色小说| 亚洲精品乱码久久久久久金桔影视| 一级久久久久久久| 一本色道**综合亚洲精品蜜桃冫| 久久精品一区二区三| 中文字幕中文字幕在线一区| mm131美女视频| 国产iv一区二区三区| www.亚洲自拍| 麻豆精品蜜桃视频网站| 91av俱乐部| 国产模特精品视频久久久久| 欧美久久在线观看| 欧美国产另类| 国产911在线观看| 天天超碰亚洲| 一本一本a久久| 久久高清免费| 水蜜桃亚洲精品| 精品国产不卡| 五月天久久综合网| 日韩欧美综合| 亚洲蜜桃在线| 成人久久一区| 亚洲午夜精品一区二区| 精品成av人一区二区三区| 欧美日韩国产高清视频| 窝窝社区一区二区| 久久久影院一区二区三区| 大奶一区二区三区| 成人自拍视频网站| 成人福利一区| 精品免费国产| 日韩超碰人人爽人人做人人添| 九色91在线视频| 小嫩嫩12欧美| 欧美日韩日本网| 国产一区网站| 亚洲蜜桃av| 综合激情婷婷| 国产手机免费视频| 国产婷婷精品| 国产精品少妇在线视频| 日本色综合中文字幕| 91看片在线免费观看| 久久se精品一区二区| 一级黄色高清视频| 成人一区二区视频| 成人无码www在线看免费| 国产日本亚洲高清| 激情无码人妻又粗又大| 一区二区三区免费观看| 亚洲视频免费播放| 色综合网站在线| 一区二区国产欧美| 日韩免费观看高清完整版| 神马午夜一区二区| 亚洲天天在线日亚洲洲精| 国产区在线看| 久久久女女女女999久久| 韩日成人影院| 91久久国产精品| 果冻天美麻豆一区二区国产| 欧美精品在线一区| 婷婷综合社区| 日本福利视频在线| 久久国产精品区| 少妇伦子伦精品无吗| 久久精品视频免费观看| 国产性生活大片| 天天影视涩香欲综合网| 中文字幕一区二区三区四区免费看| 日韩三级免费观看| 你懂的在线免费观看| 久久久国产在线视频| h片在线观看视频免费免费| 国产精品嫩草视频| 国产极品模特精品一二| 一区二区国产日产| 夜夜嗨一区二区三区| 制服丝袜中文字幕第一页| www.亚洲在线| 男人av资源站| 欧美午夜精品久久久久久浪潮 | 亚洲国产精彩中文乱码av| av在线免费播放网站| 久久久久久久久久久免费| 国产a亚洲精品| 久久久综合香蕉尹人综合网| 午夜视频一区| 黄色手机在线视频| 91亚洲精品久久久蜜桃网站| 亚洲二区在线播放| 欧美亚洲自拍偷拍| 亚洲色欧美另类| 久久99国产精品自在自在app| 国产另类xxxxhd高清| 国产日韩精品久久| 中文字幕一区二区三三| 午夜两性免费视频| 久久精品视频一区二区三区| 日韩美女黄色片| 欧美成人一级视频| 黄色在线观看网站| 国产精品影片在线观看| 天天躁日日躁成人字幕aⅴ| www.在线观看av| 国产精品亚洲视频| 午夜爱爱毛片xxxx视频免费看| 在线观看av不卡| 日夜干在线视频| 91国产视频在线| 另类春色校园亚洲| 亚洲色欲久久久综合网东京热| 国产在线乱码一区二区三区| 国产午夜精品久久久久久久久| 色婷婷亚洲综合| 欧美女优在线观看| 欧美孕妇与黑人孕交| 青青草原在线亚洲| 久久精品国产sm调教网站演员| 国产jizzjizz一区二区| 久久久.www| 欧美一二三区精品| 91麻豆一二三四在线| 91啪国产在线| 午夜激情久久| xxx中文字幕| 亚洲黄色录像片| 亚洲精品无amm毛片| 欧美日韩高清在线观看| caoporn成人| 91传媒免费视频| 成人天堂资源www在线| 国产成人精品亚洲男人的天堂| 亚洲精品在线免费播放| 超碰资源在线| 久久久久久久有限公司| 老司机精品福利视频| 91成人在线免费视频| 欧美日韩在线三区| 欧美13一16娇小xxxx| 亚洲综合在线中文字幕| 国内自拍一区| 中文字幕在线播放一区| 狠狠躁18三区二区一区| 国产区视频在线播放| 国产精品青草久久久久福利99| 国产精品7m凸凹视频分类| 一卡二卡三卡四卡五卡| 五月婷婷激情综合网| 国产在线三区| 成人欧美一区二区三区在线| 欧美三级免费| 久久亚洲AV成人无码国产野外| 欧美亚洲一区二区在线观看| 蜜桃视频在线观看www社区| 99精品欧美一区二区三区| 亚洲综合好骚| 欧美巨胸大乳hitomi| 日韩精品中文字幕一区| 欧美亚洲日本精品| 亚洲永久激情精品| 丰满岳乱妇一区二区三区| 一级片视频在线观看| 日韩一区在线视频| 精品国产一区二区三区成人影院 | 成人在线不卡| 中文精品无码中文字幕无码专区 | 日韩一区二区三区高清免费看看| av在线app| 久久艹中文字幕| 老司机精品视频在线| 国产精品99精品无码视| 在线免费看av不卡| 懂色av一区二区| 色国产在线视频| 婷婷六月综合网| 国产盗摄在线观看| 欧美日韩精品免费看| 国产白丝精品91爽爽久久|