我正在构建一个有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"
/>
答案 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
可能可以帮助您避免图像的大量记忆。