0

我想創建一些圖片相冊應用程序。但是,當創建新的片段時,舊片斷會停留並且它包含的位圖快速填滿我的內存,導致內存不足錯誤。Android片段內存泄漏相關的位圖使用

這裏是我想要做的事:

讓說,我有3個類別。婚禮圖片,暑假和其他。點擊每個類別後,我想在旁邊的片段中顯示照片。

對於主視圖我使用MasterDetailFlow模板中的FragmentActivity(當您在Eclipse中創建新的Android項目時)。所以基本上它有一個listView的片段(這裏是我的類別)和framelayout放置我的其他片段。

因爲我想有ViewPager的圖片我創建片段放

android.support.v4.view.ViewPager 

的FrameLayout裏內(在活動onItemSelected :):

fragment = new PagerFragment(); 
fragment.setArguments(arguments); 
getSupportFragmentManager().beginTransaction() 
    .replace(R.id.item_detail_container, fragment).commit(); 

該片段基本上只是用來建立:

onCreateView .... 
rootView = inflater.inflate(R.layout.pager, container, false); 

    myFragmentStatePagerAdapter = new MyFragmentStatePagerAdapter(
      getActivity().getSupportFragmentManager(), pictures); 
    mViewPager = (ViewPager) rootView.findViewById(R.id.pager); 
    mViewPager.setAdapter(myFragmentStatePagerAdapter); 

    return rootView; 

適配器另一方面創建新的PictureFrag在getItem方法中。

PictureFragment使用BitmapFactory和LruCache來獲取圖片。我的WeakReference存儲在PictureFragment和onDestroyView位圖()我稱之爲:

if (bitmapReference !=null){ 
     bitmapReference.get().recycle(); 
     bitmapReference = null; 
    } 

現在的問題。在一個PagerFragment中,它看起來都很好。 PicturesFragments被創建和銷燬。記憶似乎受到控制。但是,當我點擊其他列表元素上的活動時,問題就開始了。我可以在日誌中看到爲pager View創建了兩個新的片段,我可以看到在PagerFragment上調用了onDestroyView()方法,但在PictureFragment上調用的方式並不是讓我回復Bitmaps。因此,內存不足錯誤。那麼我做錯了什麼?如何刪除裏面的PicturesFragment和位圖?

感謝您的幫助

W¯¯

回答

0

不知道這是否是同樣的問題,但前一段時間我曾與viewpager一個問題,即片段生命週期方法從來沒有打電話,問題是與片段經理。

所以,當你在創建適配器:

myFragmentStatePagerAdapter = new MyFragmentStatePagerAdapter(
     getActivity().getSupportFragmentManager(), pictures); 

嘗試使用childFragmentManager代替supportFragmentManager,看看是否能解決您的問題。