【问题标题】:Sending a Byte Array via Intent.putExtra does not work通过 Intent.putExtra 发送字节数组不起作用
【发布时间】:2015-09-13 10:20:06
【问题描述】:

我正在尝试通过 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);

                         }
                });
            }
        });

第二个活动没有打开,应用程序在捕获图像后也没有响应(通过后置摄像头)。然而,这适用于前置摄像头,因为我猜测字节数组的大小相对较小,并且比后置摄像头捕获的图片需要更少的内存。

如何解决此问题,以便将 Activity A 中捕获的图像发送到 Activity B?

【问题讨论】:

  • 你在后置摄像头上遇到了什么错误?内存问题?
  • @Danielson 是的内存问题伙伴。我现在将发布 logcat
  • @SaNtoRiaN 我现在将发布日志猫。这是一个内存问题
  • @Earthling 你试过<application android:largeHeap="true" /> 附近的android:name
  • @Danielson 我没有。我应该把它放在哪里?清单?

标签: java android android-intent android-activity camera


【解决方案1】:

如何解决此问题,以便将 Activity A 中捕获的图像发送到 Activity B?

最好的答案是:根本不要这样做。如果这些 UI 片段耦合得那么紧密,那么它们应该是一个 Activity,可能使用多个片段。

下一个最佳答案是:小心通过 static 数据成员传递它(例如,活动 A 将 byte[] 放入 static 数据成员中,活动 B 从中获取它从)。您需要确保不会泄漏此 byte[],只要 Activity B 引用该数据,就将数据成员设置为 null

【讨论】:

  • 这似乎是最好的方法。我正在考虑在彼此之上显示和隐藏RelativeLayouts 以完成任务。
  • @Earthling:直接在 Activity 内部操作视图,不使用片段,绝对是另一种可能性。
【解决方案2】:

第一次尝试(如果可能,仅用于测试目的):

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 的应用程序(例如大型照片编辑应用程序)。永远不要仅仅因为你的内存已经用完并且需要快速修复就请求一个大堆——只有在你知道所有内存被分配到哪里以及为什么必须保留它时才应该使用它。然而,即使您确信您的应用程序可以证明大堆是合理的,您也应该尽可能避免请求它。使用额外的内存将越来越多地损害整体用户体验,因为垃圾收集将花费更长的时间,并且在任务切换或执行其他常见操作时系统性能可能会变慢。

【讨论】:

    猜你喜欢
    • 2011-04-20
    • 1970-01-01
    • 2012-08-10
    • 2019-11-23
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多