java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap:报错解决

来源:互联网 发布:淘宝stefano ricci皮带 编辑:程序博客网 时间:2024/06/05 17:11

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@48c758e8:报错解决


业务是这样的,调用系统拍照获取图片,跳转另一个界面,结果拍照返回直接崩溃,不多说,直接上代码:

 @Override    public void onActivityResult(int requestCode, int resultCode, Intent data) {        switch (resultCode) {            case RESULT_OK:                int degree;                switch (requestCode) {                    case 1://拍照                        bitmap = ImageHelpUtil.readBitmapAutoSize(Environment.getExternalStorageDirectory() + "/image.jpg", 480, 480);                        if (null != bitmap) {                            if (mStrFilePath != null) {                                File file = new File(mStrFilePath);                                if (file.exists()) {                                    file.delete();                                    getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.DATA + "=?", new String[]{mStrFilePath});                                }                            }                            mStrFilePath = ImageHelpUtil.saveByGUID5(bitmap, FieldSignActivity.this);                            mStrFileId = new GuidCreatorUtil().toString();                            Intent intent = new Intent();                            intent.setClass(FieldSignActivity.this, ClipMainActivity.class);                            intent.putExtra("comefrom", 1);                            intent.putExtra("photo", (Serializable) mStrFilePath);                            intent.putExtra("photoid", mStrFileId);                            intent.putExtra("Store", mCurrentStore);                            startActivityForResult(intent, 9);                        }                        break;                }        }        Control.getControl().getStoreService().getStoreFromServer(                this, mHandlerGetStoreList, SituationType.Situation_NotAssign,                (float) latitude, (float) longitude);//        animationDrawable.stop();//        mImgLoading.setVisibility(View.GONE);    }


通过debug调试,bitmap是有值的,到另一个界面代码如图:

@Override    public void initData() {        EventBus.getDefault().register(this);        intent = this.getIntent();        mPhotoInfo = (String) intent.getSerializableExtra("photo");        int come = intent.getIntExtra("comefrom", 0);        mStrFileId = intent.getStringExtra("photoid");        mCurrentStore = (StoreDetailInfo)intent.getSerializableExtra("Store");        if (come == 1) {            mRelaLayoutBottom.setVisibility(View.VISIBLE);            mTxtSure.setVisibility(View.GONE);            mTxtBack.setVisibility(View.GONE);            mProgress = BaseHelper.showProgress(ClipMainActivity.this, null, "", false, false);            mLocationClient = new AMapLocationClient(getApplicationContext());            getGps();        } else {            mRelaLayoutBottom.setVisibility(View.GONE);            mTxtSure.setVisibility(View.VISIBLE);            mTxtBack.setVisibility(View.VISIBLE);        }        mbitmap = getLoacalBitmap(mPhotoInfo);        ClipImageLayout.mZoomImageView.setImageBitmap(mbitmap);        BitmapUtil.recycleBitmap(mbitmap);    }


发现,用完bitmap,就释放了,怀疑有问题,放在onDestroy()中释放,问题解决。

可能是bitmap设置需要时间,但是你马上释放可能就会有问题,所以最好放在界面销毁时去释放。。。

PS:希望可以帮到大家。。。

阅读全文
0 0