java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap:報錯解決
阿新 • • 發佈:2018-12-30
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected]:報錯解決
業務是這樣的,呼叫系統拍照獲取圖片,跳轉另一個介面,結果拍照返回直接崩潰,不多說,直接上程式碼:
通過debug除錯,bitmap是有值的,到另一個介面程式碼如圖:@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); }
發現,用完bitmap,就釋放了,懷疑有問題,放在onDestroy()中釋放,問題解決。@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設定需要時間,但是你馬上釋放可能就會有問題,所以最好放在介面銷燬時去釋放。。。
PS:希望可以幫到大家。。。