日常开发问题记录
问题描述
- 开发相机过程中遇见一个情况,在拍完照片后希望能跳转到编辑界面编辑图片,所以采用startActivity,携带bitmap跳转,结果发现,跳转失败,且程序无崩溃闪退等现象
- 打了断点后发现 startActivity有执行,查看日志发现有如下报错
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
复制代码
找到原因
解决方法
- 尽可能的不再Intent中传递Bitmap。可以先把要传递的bitmap保存在SD中,Intent中传递时用url地址代替。
/**
* 将图片数据转化成文件
* @param face
* @param data
* @param isHardWareNoSupport
*/
private File convertBitmapDataToFile(int face, byte[] data, boolean isHardWareNoSupport) {
FileOutputStream fos = null;
try {
LogUtils.d("<<onPictureTaken>> time2:" + System.currentTimeMillis());
Bitmap bitmap = BitmapFactory.decodeByteArray(data,0,data.length);
if (face == CameraView.FACING_FRONT){ //如果是前置摄像头需要左右翻转
Matrix matrix = new Matrix();
matrix.setScale(-1,1);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}
String fileName = Config.getImageName(mContext);
fos = new FileOutputStream(fileName);
//硬件不支持的比例尺寸,进行裁剪
if (isHardWareNoSupport) {
AspectRatio ratio = mCameraView.getAspectRatio();
float ratioValue = ratio != null ? ratio.getY() * 1.0f / ratio.getX() : 1;
CropStrategy cropStrategy = CropStrategyFactory.newCropStrategy(isHardWareNoSupport, mCurrentPhotoRatioType);
bitmap = cropStrategy.crop(bitmap, ratioValue);
}
LogUtils.d("<<onPictureTaken>> time3:" + System.currentTimeMillis());
//三个参数分别是压缩后的图像的格式(png),图像显示的质量(0—100),100表示最高质量,图像处理的输出流(out)
//如果保存为png格式会十分耗时
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
bitmap.recycle();
fos.close();
LogUtils.d("<<onPictureTaken>> time4:" + System.currentTimeMillis());
return new File(fileName);
} catch (Exception e) {
e.printStackTrace();
} finally {
FileUtils.closeQuietly(fos);
}
return null;
}
复制代码
Intent intent = new Intent(mContext, EditPicActivity.class);
intent.putExtra(Config.INTENT_EDITOR_IMG_PATH, file.getAbsolutePath());
mContext.startActivity(intent);
```shi复制代码