日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

基于Android Studio的内存泄漏检测与解决全攻略

發布時間:2025/3/21 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Android Studio的内存泄漏检测与解决全攻略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自從Google在2013年發布了Android Studio后,Android Studio憑借著自己良好的內存優化,酷炫的UI主題,強大的自動補全提示以及Gradle的編譯支持正逐步取代Eclipse,成為主流的Android開發IDE。Android Studio在為我們提供了良好的編碼體驗的同時,也提供了許多對App性能分析的工具,讓開發者可以更方便分析App性能。Google在IO大會上一直告誡開發者不要無節制的使用手機內存,要注意一些不良的開發習慣會導致App的內存泄漏。雖然如今網上檢測App內存泄漏的文章汗牛充棟,但是要使用DDMS和MAT,不僅使用步驟復雜繁瑣,而且要手動排查內存泄漏的位置,操作起來多有不便。其實Android Studio已經開始支持自動進行內存泄漏檢查了,本文就帶著大家一探其中的奧妙吧。



什么是內存泄漏
Android虛擬機的垃圾回收采用的是根搜索算法。GC會從根節點(GC Roots)開始對heap進行遍歷。到最后,部分沒有直接或者間接引用到GC Roots的就是需要回收的垃圾,會被GC回收掉。而內存泄漏出現的原因就是存在了無效的引用,導致本來需要被GC的對象沒有被回收掉。

舉個栗子

private static Leak mLeak;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);mLeak = new Leak();}class Leak {}

mLeak是存儲在靜態區的靜態變量,而Leak是內部類,其持有外部類Activity的引用。這樣就導致Activity需要被銷毀時,由于被mLeak所持有,所以系統不會對其進行GC,這樣就造成了內存泄漏。



再舉一個最常犯的栗子

public class Singleton {private static Singleton instance;private Context mContext;private Singleton(Context context){this.mContext = context;}public static Singleton getInstance(Context context){if (instance == null){synchronized (Singleton.class){if (instance == null){instance = new Singleton(context);}}}return instance;} }

如果我們在在調用Singleton的getInstance()方法時傳入了Activity。那么當instance沒有釋放時,這個Activity會一直存在。因此造成內存泄露。
解決方法可以將new Singleton(context)改為new Singleton(context.getApplicationContext())即可,這樣便和傳入的Activity沒關系了。



內存泄漏的檢測
打開Android Studio,編譯代碼,在模擬器或者真機上運行App,然后點擊,在Android Monitor下點擊Monitor對應的Tab,進入如下界面



在Memory一欄中,可以觀察不同時間App內存的動態使用情況,點擊可以手動觸發GC,點擊可以進入HPROF Viewer界面,查看Java的Heap,如下圖



Reference Tree代表指向該實例的引用,可以從這里面查看內存泄漏的原因,Shallow Size指的是該對象本身占用內存的大小,Retained Size代表該對象被釋放后,垃圾回收器能回收的內存總和。
下面我們以掌上道聚城客戶端為例,來一探內存泄漏檢測的方法。
打開Android Studio,編譯代碼,運行掌上道聚城,然后開始盡情的耍我們的App啦,然后就從Memory Monitor里面觀察App的內存使用曲線,突然發現,納尼!!!怎么內存使用越來越大了,這就很有可能是發生內存泄漏了,然后點擊手動進行GC,再點擊觀看JavaHeap,點擊Analyzer Task,Android Monitor就可以為我們自動分析泄漏的Activity啦,分析出來如下圖所示


在Reference Tree里面,我們直接就可以看到持有該Activity的單例對象,直接定位到該單例中的代碼,發現代碼中出現了

public static VideoTagHelper getInstance(Context context) {if (tagHelper == null) {tagHelper = new VideoTagHelper();}tagHelper.context = context;return tagHelper;}

和剛剛舉得栗子里出現的錯誤一模一樣啊,這段代碼是誰寫的,拖出去······
我們修復了檢查出的內存泄漏的問題,并將修復前和修復后的代碼在相同的模擬器上運行并進行相同的操作,查看他們使用內存的情況,如下圖所示

有內存泄漏的情況,占用內存約為43M

修復了內存泄漏問題,占用內存為36M
在修復了內存泄漏問題后,內存使用下降了16.3%!!!

轉自:騰訊質量開放平臺

總結

以上是生活随笔為你收集整理的基于Android Studio的内存泄漏检测与解决全攻略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩有码第一页 | 91av视频在线观看 | 中文有码在线 | 亚洲第一国产视频 | 中文字幕乱码中文乱码b站 国产一区二区三区在线观看视频 | 久久亚洲精品国产 | 极品91| 两性视频久久 | 午夜视频在线瓜伦 | 深夜激情网| 97日日夜夜 | 超碰在线免费97 | 亚洲综合图色40p | 久久午夜场 | 在线国产一区 | 99re这里只有精品在线观看 | 国产在线国偷精品免费看 | 精品无码久久久久久久久久 | 亚洲h动漫 | 亚洲av无一区二区三区怡春院 | 中国一级黄色大片 | 欧美一级爆毛片 | 九九自拍 | 天天色综合影视 | 国产精品丝袜黑色高跟鞋的设计特点 | 欧美精品电影一区二区 | 人妻无码一区二区三区久久99 | 在线成人黄色 | 91嫩草香蕉| 国产高清免费av | 国产在线拍揄自揄拍 | 天天看夜夜 | 亚洲AV综合色区国产精品天天 | 日韩人妻无码精品综合区 | 中文国语毛片高清视频 | 久久免费福利视频 | 天天干夜夜添 | 黄色小说在线观看视频 | 在线观看黄色网 | 中国av毛片| 91美女在线观看 | 综合久久久久久 | 久操久 | 污视频网址| 天天干天天搞天天射 | 台湾佬中文在线 | 91精品国产欧美一区二区成人 | 国内自拍视频在线播放 | 国产又粗又猛又爽免费视频 | 久久特级毛片 | 日韩成人精品在线 | 成人性视频网站 | 欧美在线视频你懂的 | 成人爽a毛片一区二区免费 日本高清免费看 | 免费黄色在线网站 | 91精品欧美一区二区三区 | 男女午夜免费视频 | 欧美wwwwww | 国产九九九精品 | 成人免费在线 | 欧美日韩小说 | 久久久老司机 | 超碰男人的天堂 | 日本一区二区免费视频 | 观看av | 日本中文字幕视频 | 一道本一区| 乱码一区二区三区 | 伊人在线视频 | 警察高h荡肉呻吟男男 | 男人操女人逼逼视频 | 亚洲精品无码不卡在线播he | 久久精品在线观看 | 欧美激情自拍 | xxxⅹ少妇少妇xxxx | 国产98在线 | 91大神视频在线播放 | 久久久久久久久久久97 | 日韩在线一卡二卡 | 亚洲经典av | 丰满岳妇伦在线播放 | 成人av动漫 | 欧美少妇b | 四虎国产成人永久精品免费 | 免费日本在线 | 欧美性猛交xxxx乱大交俱乐部 | jzzijzzij亚洲成熟少妇18 欧美www在线观看 | 精品国产91久久久久久久妲己 | 日出白浆视频 | 丰满人妻一区二区三区53视频 | 黄色录象片 | 男人天堂你懂的 | 国产精品免费视频一区二区 | 在线免费观看黄色av | 欧美三级一区二区 | 日本精品视频一区二区三区 | 日韩一区二区三区高清 | 日穴视频| 免费av入口 |