Android动画列表-简单示例抛出java.lang.OutOfMemoryError
本文关键字:java lang OutOfMemoryError 动画 列表 简单 Android | 更新日期: 2023-09-27 17:57:41
Android/Xamarin中动画列表的限制是什么?
我试过一个简单的例子,有10帧,每个帧不到200kb,但我仍然会出现内存不足的错误。我也尝试过这个库,但我得到了一个位图解码错误。
测试活动.xaml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/myLayout"
android:clipChildren="false">
<ImageView
android:id="@+id/myAnimation"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:src="@anim/TestAnimation"
android:scaleType="centerInside" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:paddingLeft="10dp"
android:paddingRight="20dp"
android:paddingTop="170dp"
android:paddingBottom="100dp"
android:clipChildren="false"
android:clipToPadding="false">
<ImageButton
android:id="@+id/triggerAnimation"
android:layout_height="20dp"
android:layout_width="60dp"
android:background="@android:color/transparent"
android:adjustViewBounds="false"
android:src="@drawable/myButton"
android:scaleType="fitXY"
android:padding="0dp"/>
</LinearLayout>
</RelativeLayout>
TestAnimation.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/test0000" android:duration="33" />
<item android:drawable="@drawable/test0001" android:duration="33" />
<item android:drawable="@drawable/test0002" android:duration="33" />
<item android:drawable="@drawable/test0003" android:duration="33" />
<item android:drawable="@drawable/test0004" android:duration="33" />
<item android:drawable="@drawable/test0005" android:duration="33" />
<item android:drawable="@drawable/test0006" android:duration="33" />
<item android:drawable="@drawable/test0007" android:duration="33" />
<item android:drawable="@drawable/test0008" android:duration="33" />
<item android:drawable="@drawable/test0009" android:duration="33" />
<item android:drawable="@drawable/test0010" android:duration="33" />
TestActivity.cs(只显示动画触发代码):
var imgView = FindViewById<ImageView>(Resource.Id.myAnimation);
AnimationDrawable animation = (AnimationDrawable)imgView.Drawable;
animation.Start();
您的1280 x 1920 ANDROID_BITMAP_FORMAT_RGBA_8888
格式图像:
- 1280 x 1920 x 10 x(8位x 4(RGBA))=786432000位(96MB)
因此,对于内存有限的设备中的10个抽屉来说,这至少是96兆字节。
您可能需要考虑将这些图像转换为视频,或对其进行下采样等。
您在Bitmap
的大小中看到的200kb是压缩大小。在应用程序中绘制时,每个Bitmap
都会占用其未压缩的大小。阅读此答案以了解更多详细信息。
这个问题非常棘手,因为它发生在某些设备上,而在很多设备上都没有。这取决于设备的策略以及它如何处理/释放内存小米手机往往会面临很多这样的OutOfMemoryErrors
根据我的经验,由于他们的自定义操作系统。
阅读我上面分享的答案,它可能会帮助你找到一些答案。