相关疑难解决方法(0)

回收ImageView的位图

我有这样的事情:

Bitmap.Config conf = Bitmap.Config.ARGB_8888;
WeakReference<Bitmap> bm = new WeakReference<Bitmap>(Bitmap.createBitmap(3000 + 3000, 2000, conf));

Canvas canvas = new Canvas(bm.get());
canvas.drawBitmap(firstBitmap, 0, 0, null);
canvas.drawBitmap(bm, firstBitmap.getWidth(), 0, null);

imageView.setImageBitmap(bm);
Run Code Online (Sandbox Code Playgroud)

我将它应用于10个以上逐个创建的imageView.每当我创建新的ImageView时,我想从第一个回收'bm'对象,导致这个代码在那里,导致我的堆越来越多,然后抛出OutOfMemoryError,所以我这样做:

bm.recycle()
Run Code Online (Sandbox Code Playgroud)

在我将Bitmap(bm)设置为imageView对象之后.这导致ImageView的画布想要绘制回收的Bitmap的异常.

回收已在ImageView上作为图像放置的Bitmap的方法是什么?

Thanksb

java android memory-leaks bitmap

38
推荐指数
1
解决办法
4万
查看次数

Android如何避免这种内存不足错误

我有很多图像说500ish分布在20个左右的片段中,图像都很小,而且加载都很好,但是我给用户提供了3种不同类型的图像的选择,如果用户现在更改图像,收到OOM错误,因此我认为这是即时处理图像的方式,我认为我需要首先回收旧的图像,但即时通讯对如何做到这一点不确定,任何人都可以帮忙吗?

这是我如何填充我的适配器的方法,我只是添加了两项以简化操作

    private void prepareCardData(){

    CardWriter cardWriter = new CardWriter(getResources().getDrawable(R.drawable.dog),"DOG","dog ");
    cardMakerList.add(cardWriter);

    cardWriter = new CardWriter(getResources().getDrawable(R.drawable.cat_ic),"CAT","cat ");
    cardMakerList.add(cardWriter);

    cardAdapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

这就是我实际上只是在等待共享首选项更改并调用方法的地方

private SharedPreferences.OnSharedPreferenceChangeListener listener = new     
SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if(key.equals("ICONS SELECTED")){
            cardsChoice.setIcons(getActivity());
            cardsToSet();
            System.out.println("OneFrag pref listener");
        }
    }
};
public void cardsToSet(){
    if (cardsChoice.bool_fragTwo == false) {
        if (cardsChoice.group == 1) {
            cardMakerList.clear();
            prepareCardData();
            cardsChoice.bool_fragTwo = true;
        }
        if (cardsChoice.group == 2) {
            cardMakerList.clear();
            prepareSimpleCardData();
            cardsChoice.bool_fragTwo = true;
        }
        if (cardsChoice.group == 3) …
Run Code Online (Sandbox Code Playgroud)

android out-of-memory drawable

2
推荐指数
1
解决办法
7447
查看次数

标签 统计

android ×2

bitmap ×1

drawable ×1

java ×1

memory-leaks ×1

out-of-memory ×1