java.lang.OutOfMemoryError,即使是Android中的小尺寸图像也是如此

时间:2018-02-18 22:31:01

标签: java android performance

我正在构建一个有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"
            />

2 个答案:

答案 0 :(得分:1)

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

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

  • 针对不同的密度设置相同图像的不同版本。 Android Studio中的“图像资源”向导可以为您设置此功能。

  • 或者,将图像放在res/drawable-anydpi/中,告诉Android不要升级或缩小图像。

答案 1 :(得分:0)

你现在可以使用Drawable,因为Android也支持Vector。 要支持API级别21以下的矢量,您可以按照以下官方链接进行操作。

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

可能可以帮助您避免图像的大量记忆。