【问题标题】:Android: How to return huge byte array as activity's result?Android:如何返回大字节数组作为活动的结果?
【发布时间】:2015-07-29 20:55:23
【问题描述】:
private void returnImage(byte[] array)
{
    Intent intent = new Intent();
    intent.putExtra(RETURNING_MESSAGE, array);
    setResult(RESULT_OK, intent);
    finish();
}

我通过相机通过这些回调获得了那个字节数组

@Override
public void onClick(View v) {
    mCamera.takePicture(null, null, new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            mCamera.release();
            returnImage(data);
        }
    });
}

在运行时我使用相机,但活动没有完成,Logcat 说E/JavaBinder﹕ !!! FAILED BINDER TRANSACTION !!! 是图片大小造成的吗?我检查并发现它超过了200万字节。我需要使用我的自定义相机,但我无法返回我的数据。

【问题讨论】:

    标签: android android-intent camera return onactivityresult


    【解决方案1】:

    是图片大小造成的吗?

    是的。

    我检查并发现它超过 200 万字节。

    这大约是您可以返回的两倍。

    我需要使用我的自定义相机,但我无法返回我的数据。

    要么:

    1. 不要让它们成为单独的活动,而是将它们作为一个活动中的单独片段,因此您不必担心 Intent 是限制因素,或者

      李>
    2. 使用其他东西,例如从静态数据成员到 byte[] 的(临时!)引用,它允许同一应用程序中的多个活动共享数据,或者

    3. 如果调用startActivityForResult() 的活动位于单独的应用程序中,请使用ContentProvider 将字节流回

    【讨论】:

    • 我使用了第二种方式,否则我将不得不管理另一个片段...当您说临时的时,您的意思是在处理后立即将其设置为空?
    • 另一个疑问...最好在父或子活动(带有自定义相机的那个)中有一个静态成员?
    • @user3290180:“当您说临时的时,您的意思是在处理后立即将其设置为空?” - 是的,所以你不太可能泄漏内存。 “最好在父或子活动中拥有一个静态成员(带有自定义相机的那个)?” -- 我不确定这是否重要。
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多