【问题标题】:OutOfMemoryError Failed to allocate a 1250874912 byte allocation with 16777216 free bytes and 338MB until OOMOutOfMemoryError 无法分配 1250874912 字节分配,其中 16777216 可用字节和 338MB 直到 OOM
【发布时间】:2017-12-07 17:05:27
【问题描述】:

我只是从 drawable 中获取图像并将其放入位图中,但是在进入位图时会引发错误

java.lang.OutOfMemoryError: 无法分配 1250874912 字节分配,其中 16777216 个可用字节和 338MB 直到 OOM

下面是我的代码

Bitmap icon = BitmapFactory.decodeResource(getResources(),
            R.drawable.vr_image);
    int size = icon.getByteCount();

在 stackoverflow 上找到了一些解决方案,但这些也不起作用。

在应用程序标签下的清单上,我定义了以下值

 android:allowBackup="true"
    android:hardwareAccelerated="false"
    android:largeHeap="true"
    android:supportsRtl="true"

所以任何人都可以帮助我解决这个问题,但没有得到任何解决方案。

【问题讨论】:

  • 你的vr_image图片尺寸是多少?
  • 9999x3475 是图像的尺寸
  • 您认为9999x3475 是移动平台上图像的正常尺寸?
  • 然后像普通文件一样用文件流读取图像,不要先转换成位图。这样,您将位图的内容加载到大约 1.2gb 的内存中(基于错误消息中的字节)。使用固定缓冲区大小读取它并通过套接字发送该缓冲区数据就足够了
  • @WarrenFaith 我已经解决了这个问题,因为你告诉我非常感谢!

标签: java android bitmap


【解决方案1】:

您可以使用毕加索图书馆。使用根据设备需要的像素,您可以调整大小并加载到图像视图中

 Picasso.with(context).load(incidentType.getIconServerPath()).error(R.drawable.no_image_icon).resize(mWidth, mWidth).onlyScaleDown().centerInside().into(holder.imageViewIcon,
                    new Callback() {
                        @Override
                        public void onSuccess() {
                            holder.relativeLayout.removeView(holder.progressBar);
                        }

                        @Override
                        public void onError() {
                            holder.relativeLayout.removeView(holder.progressBar);
                        }
                    });
        }
    });

【讨论】:

    【解决方案2】:

    由于图像的大小,您正面临这个问题。它太大了,要么使用像 ---http://square.github.io/picasso/ 这样的库,要么减小图像的大小。最好使用毕加索。请不要在应用程序中增加大小,这会影响应用程序的性能。

    【讨论】:

    • 但我不需要放置任何视图我只想要一个位图或 uri 因为我已经使用套接字将此图像发送到另一部手机
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多