我想創建一些圖片相冊應用程序。但是,當創建新的片段時,舊片斷會停留並且它包含的位圖快速填滿我的內存,導致內存不足錯誤。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¯¯