繁体   English   中英

通过Intent.putExtra发送字节数组不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM