亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android中Memory Leak原因分析及解決辦法

 更新時間:2017年12月18日 09:59:56   作者:灰色飄零  
這篇文章主要介紹了Android中Memory Leak原因分析及解決辦法,需要的朋友跟著學習下吧。

在Android開發(fā)過程中,我們經常碰到的情況就是在我們不清楚為什么情況下,程序突然出現(xiàn)Crash了。其中有一類日志相信大家都經常碰到過,這類日志就是OOM相關的日志。這類日志除了我們知道的Bitmap操作的時候會經常導致,還有一種隱藏的較深的原因就是內存泄露(Memory Leak)。

內存泄露產生原因和影響: 原因:當一個Object不再需要的時候,本該被GC回收時,但是因為另一個正在使用的Object持有它導致不能正常的被回收,本該被回收的對象不能回收,還存留在堆內存中,此時就產生了內存泄露。影響:Android系統(tǒng)能夠為每個應用程序分配的內存是有限的,當一個應用程序中產生的內存泄露過多的時候,會難免導致應用程序需要的內存超過限額而導致內存溢出使得應用程序崩潰。 內存泄露的檢測方式

推薦使用 LeakCanary 工具來檢測應用程序是否存在內存泄露。LeakCanary是由 Square 開源的一款輕量級的第三方內存泄漏檢測工具,當檢測到程序中產生內存泄漏時,它將以最直觀的方式告訴我們哪里產生了內存泄漏和導致誰泄漏了而不能被回收。

如何避免內存泄露

1、合理使用單例模式。

單例的靜態(tài)特性使得其生命周期和應用的生命周期一樣長。

如圖,我們先聲明一個單例對象:


然后在Activity使用的時候,習慣性的傳一個this:


集成了LeakCanary后測試,發(fā)現(xiàn)內存泄露了:


解決方案:

一般情況下,改成如下圖的寫法就可以了,因為單例的生命周期和應用的一樣長,這樣就防止了內存泄漏。:


總結:單例模式造成泄漏的原因是擁有更長生命周期的對象持有短生命周期對象的強引用。

2、使用資源時注意資源的關閉

一般情況下,容易產生內存泄露的資源主要為:File,Cursor,Stream,Bitmap,BroadcastReceiver等,這些資源在使用時建議及時關閉,否則當這些資源沒有及時回收的時候,內存泄露也就產生了。針對這些資源使用,給如下建議:

BroadcastReceiver 在register之后,需要在適當的時機unregister Cursor、Stream、File 這類資源類型的對象往往會使用一些Cache,所以我們在不使用的時候,應該及時關閉,以便Cache被及時回收。如果我們僅僅把它的引用設置為null,而不去關閉他們,往往會造成內存泄露。一般建議是先close()后置為null。 Bitmap在不使用的時候,調用recycle()方法。目前 Android 2.3版本以后,不需要我們手動去這樣做的,這里也就是簡單的交代一下。

3、 合理使用Handler避免內存泄露

在我們使用Handler的時候,經??吹骄庉嬈魈崾疚覀僅andler可能會造成內存泄露,一般在這種情況下,我們可以將Handler獨立出來或者使用靜態(tài)內部類,這樣可以避免內存泄露。
這樣做的原因是:非靜態(tài)內部類會潛在的持有它所屬的外部類的引用,但是靜態(tài)內部類是不會的。

4、 合理的使用WeakReference來引用外部類的成員變量

我們可以使用WeakReference來規(guī)避好多潛在的內存泄露的問題,但是并不表明WeakReference就是解決內存泄露的金鑰匙。是否使用WeakReference主要取決于對當前對問題的理解,這需要我們對問題的的建模思想。

相關文章

  • Android實現(xiàn)微信加號菜單模式

    Android實現(xiàn)微信加號菜單模式

    這篇文章主要為大家詳細介紹了Android實現(xiàn)微信加號菜單模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Android編程繪制圓形圖片的方法

    Android編程繪制圓形圖片的方法

    這篇文章主要介紹了Android編程繪制圓形圖片的方法,結合實例形式較為詳細的分析了Android通過自定義控件實現(xiàn)圖形繪制的相關技巧,需要的朋友可以參考下
    2016-02-02
  • Android仿微信對話列表滑動刪除效果

    Android仿微信對話列表滑動刪除效果

    這篇文章主要為大家詳細介紹了Android仿微信對話列表滑動刪除效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 詳解Android的網絡數據存儲

    詳解Android的網絡數據存儲

    LeanCloud是一種簡單高效的數據和文件存儲服務,本文主要介紹了利用LeanCloud來進行網絡數據的存儲的實現(xiàn)方法。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • Android登錄時密碼保護功能

    Android登錄時密碼保護功能

    這篇文章主要為大家詳細介紹了Android登錄時密碼保護功能的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • android SQLite數據庫總結

    android SQLite數據庫總結

    本文主要介紹了android SQLite數據庫的相關知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Android Jetpack- Paging的使用詳解

    Android Jetpack- Paging的使用詳解

    這篇文章主要介紹了Android Jetpack- Paging的使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Android 啟動模式詳細介紹

    Android 啟動模式詳細介紹

    這篇文章主要介紹了Android 啟動模式詳細介紹的相關資料,Activity一共有以下四種launchMode啟動模式,這里一一做詳解,需要的朋友可以參考下
    2016-12-12
  • Android編程基于自定義控件實現(xiàn)時鐘功能的方法

    Android編程基于自定義控件實現(xiàn)時鐘功能的方法

    這篇文章主要介紹了Android編程基于自定義控件實現(xiàn)時鐘功能的方法,結合實例形式詳細分析了Android自定義控件的定義及時鐘功能相關實現(xiàn)技巧,需要的朋友可以參考下
    2018-03-03
  • Android自定義日歷Calender代碼實現(xiàn)

    Android自定義日歷Calender代碼實現(xiàn)

    這篇文章主要為大家詳細介紹了Android自定義日歷Calender實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論