【问题标题】:java.lang.OutOfMemoryError even with small sized images in Android [duplicate]java.lang.OutOfMemoryError 即使在Android中使用小尺寸图像[重复]
【发布时间】:2018-07-29 03:58:14
【问题描述】:

我正在构建一个有 8 个按钮的 andorid 应用程序,并且我使用了非常小的 png 图像作为背景。所有图像的大小只有355 kb 但是当我运行应用程序时它给了我错误提示

java.lang.OutOfMemoryError: Failed to allocate a 256000012 byte allocation with 16777216 free bytes and 119MB until OOM

为什么要占用这么多内存?有没有更好的方法来使用更少的内存? 这就是我在 xml 中制作按钮的方式。谢谢你

           <Button
            android:id="@+id/groupmeButton"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_alignParentLeft="true"
            android:layout_gravity="center"
            android:layout_marginLeft="50dp"
            android:background="@drawable/image1"
            android:onClick="onClick"
            />

【问题讨论】:

    标签: java android performance


    【解决方案1】:

    首先,image1 在分辨率方面太大(像素宽,像素高)。

    其次,您可能将image1 放入res/drawable/res/drawable/res/drawable-mdpi/ 的同义词,这意味着 res/drawable/ 中的可绘制对象是为 mdpi 屏幕设计的。如果你在更高密度的屏幕上运行你的应用程序,Android 会放大图像以适应更高的密度。而不是在res/drawable/中放入PNG和JPEG之类的drawable:

    • 对于不同的密度,具有相同图像的不同版本。 Android Studio 中的 Image Asset 向导可以为您进行设置。

    • 或者,将图片放入res/drawable-anydpi/,告诉Android不要放大或缩小图片。

    【讨论】:

      【解决方案2】:

      您现在可以矢量 Drawable,因为 Android 也支持矢量。 要支持 API 级别 21 以下的向量,您可以点击以下官方链接。

      https://developer.android.com/studio/write/vector-asset-studio.html

      也许这可以帮助您避免图像占用大量内存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        • 2013-12-04
        • 2011-04-22
        相关资源
        最近更新 更多