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

Andoid內存洩露,andoid洩露

編輯:關於android開發

Andoid內存洩露,andoid洩露


1 android 內存洩露是因為分配的內存回收失敗 

public static LocalHelper getInstance(Context context) {
if (instance==null){
instance = new LocalHelper(context);
}
return instance;
}

如果在contenx 傳一個Activity 那麼在Acitivty finish之後是無法對activity 進行回收的
因為 靜態實例會對activity繼續引用, 這時候 內存無法GC 會產生oom 和 內存洩露

2 Handler 引起的內存洩露

Handler 的使用造成的內存洩漏問題應該說是最為常見了

,我們知道 Handler、Message 和 MessageQueue 都是相互關聯在一起的

 Handler 發送的 Message 尚未被處理,則該 Message 及發送它的 Handler 對象將被線程 MessageQueue 一直持有。

由於 Handler 屬於 TLS(Thread Local Storage) 變量, 生命周期和 Activity 是不一致的。

因此這種實現方式一般很難保證跟 View 或者 Activity 的生命周期保持一致,故很容易導致無法正確釋放。

 建議使用弱引用 不過會有activity.成員變量 寫起來麻煩!

3  在imageloader 加載圖片的時候 如果 你使用了Rgb_565這樣是可以在加載圖片的時候減少內存消耗 不過加載出來的圖片會模糊 建議使用 imagesize,

options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(false)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageSize size = new ImageSize(getImageWidth(), getImageWidth());
imageLoader.loadImage(localFile.getOriginalUri(), size, options, new SimpleImageLoadingListener(viewHolder.imageView));
在imageload 加載原圖的時候 若果你圖片過大 建議使用線程數為1 因為在3個線程同時加載的時候很容易 oom;

4 靜態集合類對象記得clear();

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved