Java 通过Intent.putExtra发送字节数组无效
我试图通过Intent putExtra方法将捕获图像的字节数组数据发送到另一个视图,但是它只对前摄像头有效(因为质量低于后摄像头)。通过后置摄像头拍摄的照片需要很长时间才能显示出来,大多数时间都会导致应用程序崩溃 我也试过压缩,但也没用。看看我的代码:Java 通过Intent.putExtra发送字节数组无效,java,android,android-intent,android-activity,camera,Java,Android,Android Intent,Android Activity,Camera,我试图通过Intent putExtra方法将捕获图像的字节数组数据发送到另一个视图,但是它只对前摄像头有效(因为质量低于后摄像头)。通过后置摄像头拍摄的照片需要很长时间才能显示出来,大多数时间都会导致应用程序崩溃 我也试过压缩,但也没用。看看我的代码: captureImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {
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?第一次尝试(如果可能,仅用于测试):
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>
:
检查应该使用多少内存
但是,请求大型堆的功能仅适用于一小部分应用程序,这些应用程序可以证明需要消耗更多RAM(例如大型照片编辑应用程序)。不要仅仅因为内存不足而请求一个大堆,并且需要一个快速修复方法。只有当您确切地知道所有内存被分配到哪里以及为什么必须保留内存时,才应该使用它。然而,即使你确信你的应用程序可以证明这个大堆是合理的,你也应该尽可能避免请求它。使用额外内存将越来越不利于整体用户体验,因为在任务切换或执行其他常见操作时,垃圾收集将花费更长的时间,系统性能可能会更慢
如何解决此问题,以便将活动A中捕获的图像发送到活动B
最好的答案是:根本不要这样做。如果这些UI片段紧密耦合,那么它们应该是一个活动,可能使用多个片段
下一个最佳答案是:小心地通过静态
数据成员传递它(例如,活动a将字节[]
放入静态
数据成员中,活动B从中获取它)。一旦活动B引用了该数据,您需要将数据成员设置为null
,以确保不会泄漏该字节[]
。您在后摄像头上遇到了什么错误?记忆问题?@Danielson是的,记忆问题,伙计。我会发布日志now@SaNtoRiaN我现在就发日志。那是一段回忆issue@Earthling你试过
附近的安卓:name
@Danielson吗?我没有。我应该把它放在哪里?舱单?这似乎是最好的方法。我正在考虑显示和隐藏相互重叠的RelativeLayouts来完成任务。@Earthling:直接操纵活动内部的视图,没有片段,这肯定是另一种可能性。