Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android內存洩露開篇

Android內存洩露開篇

編輯:關於Android編程

先來想這三個問題

  1. 內存洩露是怎麼回事
  2. 內存會洩露的原因
  3. 避免內存洩露

    1.內存洩露怎麼回事

    一個程序中,已經不需要使用某個對象,但是因為仍然有引用指向它垃圾回收器就無法回收它,當然該對象占用的內存就無法被使用,這就造成了內存洩露。
    Android的一個應用程序的內存洩露對別的應用程序影響不大。
    為了能夠使得Android應用程序安全且快速的運行,Android的每個應用程序都會使用一個專有的Dalvik虛擬機實例來運行,它是由Zygote服務進程孵化出來的,也就是說每個應用程序都是在屬於自己的進程中運行的。
    Android為不同類型的進程分配了不同的內存使用上限,如果程序在運行過程中出現了內存洩漏的而造成應用進程使用的內存超過了
    這個上限,則會被系統視為內存洩漏,從而被kill掉,這使得僅僅自己的進程被kill掉,而不會影響其他進程(如果是system_process等系統進程出問題的話,則會引起系統重啟)
    

    2.出現內存洩露原因

    1.資源對象沒關閉造成的內存洩露
        資源性對象比如(Cursor,File文件等)往往都用了一些緩沖,我們在不使用的時候,應該及時關閉它們,以便它們的緩沖及時回收內存
    2.變量的作用域不一樣導致
      變量                              作用域 
      函數變量                           函數內
      成員變量                          整個對象內
      TLS(ThreadLocalStorage)           整個線程
      靜態變量                          整個進場內
      Binder(IPC)                      進程間
    
     因為作用域的不同,作用域大引用到對象都可能不會馬上銷毀,所以會內存洩露。     
     handle 的內存洩露主要 TLS變量和 activity的生命周期不一樣,。
     Thread 引用其他對象也容易出現對象洩露。
    
    
    3.內存壓力過大
      1.圖片資源加載過多,超過內存使用空間,例如Bitmap 的使用
      2.重復創建view,沒有重復使用  listview,的使用
    

    3.如何避免內存洩露

    1.良好的代碼規范,清晰代碼邏輯
    2.對於引用生命不一樣的對象,可以用弱引用WeakReferner
    3.對於資源對象 使用finally 強制關閉
    4.內存壓力過大就要統一的管理內存
    5.對象重復並且頻繁調用可以考慮對象池。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved