[英]Sending a Byte Array via Intent.putExtra does not work
我正在尝试通过Intent putExtra方法将捕获的图像的字节数组数据发送到另一个视图,但是它仅适用于前置摄像头 (因为质量低于后置摄像头)。 通过后置摄像头捕获的照片需要经过一段时间才能显示,并且大多数时间会使应用崩溃。
我也尝试压缩,但这也没有解决问题。 看一下我的代码:
captureImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCamera.takePicture(null, null, new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Intent i = new Intent(CameraActivity.this, ImageEditor.class);
i.putExtra("image", data);
startActivityForResult(i, 0);
}
});
}
});
捕获图像(通过后置摄像头)后,第二个活动不会打开,应用也不会响应。 但是,这对前置摄像头有效,因为我猜测字节数组的大小相对较小,并且比后置摄像头捕获的图片需要更少的内存。
如何解决此问题,以便将在活动A中捕获的图像发送到活动B?
如何解决此问题,以便将在活动A中捕获的图像发送到活动B?
最好的答案是:根本不要这样做。 如果这些用户界面紧密相连,那么它们应该是一项活动,可能需要使用多个片段。
下一个最佳答案是: 小心地通过static
数据成员传递它(例如,活动A将byte[]
放在static
数据成员中,活动B从那里获取它)。 您需要通过在活动B引用该数据后立即将数据成员设置为null
来确保不泄漏此byte[]
。
首先尝试(如果可能,仅用于测试目的):
AndroidManifest.xml中
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="package_name"
android:versionCode="1"
android:versionName="1.0" >
<application
android:name="app_name"
android:allowBackup="true"
android:label="@string/app_name"
android:largeHeap="true" <!-- large heap -->
android:theme="@style/AppTheme" >
</manifest>
来自https://developer.android.com/training/articles/memory.html :
检查应该使用多少内存。但是,请求大堆的功能仅适用于少数可以证明需要消耗更多RAM的应用程序(例如大型照片编辑应用程序)。 切勿仅仅因为内存用完并且需要快速修复而请求大堆-仅在确切知道所有内存的分配位置以及为什么必须保留它时,才应使用它。 但是,即使您确信自己的应用程序可以证明大堆的合理性,也应尽可能避免请求它。 使用额外的内存将越来越不利于整体用户体验,因为在任务切换或执行其他常见操作时,垃圾回收将花费更长的时间并且系统性能可能会降低。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.