将相机图像作为位图传递 Returns TransactionTooLarge 异常
Passing a Camera Image as Bitmap Returns TransactionTooLarge Exception
我正在为我的应用程序使用相机套件库。当我得到图片回调时,我将字节数组转换为位图并尝试将其传递给下一个activity,如下所示:
ab_capture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cameraView.captureImage(new CameraKitEventCallback<CameraKitImage>() {
@Override
public void callback(CameraKitImage cameraKitImage) {
byte[] jpeg = cameraKitImage.getJpeg();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length);
Intent previewIntent = new Intent(ImageActivity.this, PreviewActivity.class);
previewIntent.putExtra("cam_image", bitmap);
startActivity(previewIntent); // implicit
finish();
}
});
}
});
但在点击按钮后,应用程序崩溃并且我收到此错误消息:
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 3686928)
02-28 01:03:06.183 9579-9999/base.android.com.thumbsapp E/AndroidRuntime: FATAL EXCEPTION: CameraViewWorker
Process: base.android.com.thumbsapp, PID: 9579
java.lang.RuntimeException: Failure from system
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525)
at android.app.Activity.startActivityForResult(Activity.java:4226)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
at android.app.Activity.startActivityForResult(Activity.java:4185)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:732)
at android.app.Activity.startActivity(Activity.java:4509)
at android.app.Activity.startActivity(Activity.java:4477)
at base.android.com.thumbsapp.UI.Activities.ImageActivity.callback(ImageActivity.java:83)
at base.android.com.thumbsapp.UI.Activities.ImageActivity.callback(ImageActivity.java:75)
at com.wonderkiln.camerakit.CameraView.imageCaptured(CameraView.java:471)
at com.wonderkiln.camerakit.Camera1.onPictureTaken(Camera1.java:427)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1361)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: android.os.TransactionTooLargeException: data parcel size 3686928 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:622)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3197)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
at android.app.Activity.startActivityForResult(Activity.java:4226)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
at android.app.Activity.startActivityForResult(Activity.java:4185)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:732)
at android.app.Activity.startActivity(Activity.java:4509)
at android.app.Activity.startActivity(Activity.java:4477)
at base.android.com.thumbsapp.UI.Activities.ImageActivity.callback(ImageActivity.java:83)
at base.android.com.thumbsapp.UI.Activities.ImageActivity.callback(ImageActivity.java:75)
at com.wonderkiln.camerakit.CameraView.imageCaptured(CameraView.java:471)
at com.wonderkiln.camerakit.Camera1.onPictureTaken(Camera1.java:427)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1361)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.os.HandlerThread.run(HandlerThread.java:61)
此错误仅发生在牛轧糖设备上。当我 运行 在 Lollipop 上时,没有错误,但它没有启动预览 activity。
我需要帮助来理解和解决这个错误以及进入下一个 activity 的问题。谢谢
This error only occurs on a Nougat device
它会在绝大多数 Android 设备上发生。
I need help understanding and resolving this error
您的 Intent
过大,因为 Bitmap
多余。
最好的解决办法是这里不要有两个活动。有一个 activity 具有变化 UI,例如通过使用片段。
或者,小心地通过static
字段传递Bitmap
,确保尽快将该字段设置为null
,这样你没有 long-term 内存泄漏。
你永远不应该使用意图传递这个大数据。它会在大多数设备上崩溃并且设计不佳。
首先将文件存储到磁盘,然后将其路径放入 intent
我正在为我的应用程序使用相机套件库。当我得到图片回调时,我将字节数组转换为位图并尝试将其传递给下一个activity,如下所示:
ab_capture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cameraView.captureImage(new CameraKitEventCallback<CameraKitImage>() {
@Override
public void callback(CameraKitImage cameraKitImage) {
byte[] jpeg = cameraKitImage.getJpeg();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length);
Intent previewIntent = new Intent(ImageActivity.this, PreviewActivity.class);
previewIntent.putExtra("cam_image", bitmap);
startActivity(previewIntent); // implicit
finish();
}
});
}
});
但在点击按钮后,应用程序崩溃并且我收到此错误消息:
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 3686928)
02-28 01:03:06.183 9579-9999/base.android.com.thumbsapp E/AndroidRuntime: FATAL EXCEPTION: CameraViewWorker
Process: base.android.com.thumbsapp, PID: 9579
java.lang.RuntimeException: Failure from system
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525)
at android.app.Activity.startActivityForResult(Activity.java:4226)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
at android.app.Activity.startActivityForResult(Activity.java:4185)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:732)
at android.app.Activity.startActivity(Activity.java:4509)
at android.app.Activity.startActivity(Activity.java:4477)
at base.android.com.thumbsapp.UI.Activities.ImageActivity.callback(ImageActivity.java:83)
at base.android.com.thumbsapp.UI.Activities.ImageActivity.callback(ImageActivity.java:75)
at com.wonderkiln.camerakit.CameraView.imageCaptured(CameraView.java:471)
at com.wonderkiln.camerakit.Camera1.onPictureTaken(Camera1.java:427)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1361)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: android.os.TransactionTooLargeException: data parcel size 3686928 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:622)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3197)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
at android.app.Activity.startActivityForResult(Activity.java:4226)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
at android.app.Activity.startActivityForResult(Activity.java:4185)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:732)
at android.app.Activity.startActivity(Activity.java:4509)
at android.app.Activity.startActivity(Activity.java:4477)
at base.android.com.thumbsapp.UI.Activities.ImageActivity.callback(ImageActivity.java:83)
at base.android.com.thumbsapp.UI.Activities.ImageActivity.callback(ImageActivity.java:75)
at com.wonderkiln.camerakit.CameraView.imageCaptured(CameraView.java:471)
at com.wonderkiln.camerakit.Camera1.onPictureTaken(Camera1.java:427)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1361)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.os.HandlerThread.run(HandlerThread.java:61)
此错误仅发生在牛轧糖设备上。当我 运行 在 Lollipop 上时,没有错误,但它没有启动预览 activity。
我需要帮助来理解和解决这个错误以及进入下一个 activity 的问题。谢谢
This error only occurs on a Nougat device
它会在绝大多数 Android 设备上发生。
I need help understanding and resolving this error
您的 Intent
过大,因为 Bitmap
多余。
最好的解决办法是这里不要有两个活动。有一个 activity 具有变化 UI,例如通过使用片段。
或者,小心地通过static
字段传递Bitmap
,确保尽快将该字段设置为null
,这样你没有 long-term 内存泄漏。
你永远不应该使用意图传递这个大数据。它会在大多数设备上崩溃并且设计不佳。
首先将文件存储到磁盘,然后将其路径放入 intent