1. 程式人生 > >java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap:報錯解決

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap:報錯解決

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected]:報錯解決

業務是這樣的,呼叫系統拍照獲取圖片,跳轉另一個介面,結果拍照返回直接崩潰,不多說,直接上程式碼:

 @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:希望可以幫到大家。。。