来自xml的SetbackgroundResource崩溃VM,内存不足。我该如何优化呢?

时间:2013-05-06 19:25:36

标签: java android animation memory

我目前正在Android中制作一个小应用程序。 我希望有两个ImageViews,当我点击屏幕上的不同按钮时,它们会改变动画。

首先是一个示例xml :( drawables是250x350y .png文件)

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/main_idle_kf1" android:duration="500" />
    <item android:drawable="@drawable/main_idle_kf2" android:duration="500" />
    <item android:drawable="@drawable/main_idle_kf3" android:duration="500" />
    <item android:drawable="@drawable/main_idle_kf2" android:duration="500" />
</animation-list>

我的代码示例

ImageView _imgView1; //declared in oncreate = ((ImageView) findViewById... etc)
AnimationDrawable _aniDrawable1;

的onResume:

_imgView1.setBackgroundResource(R.drawable.anim_main_idle);
_aniDrawable1 = (AnimationDrawable) _imgView1.getBackground();
_aniDrawable1.start();

到目前为止这是有效的,并且没有问题。小精灵做它的跳汰机。 然而,我一次对两个imageViews做这个,我一直在尝试在XML中为每个添加更多/不同的“框架”。但是,在VM崩溃之前我不必添加很多帧,因为内存不足。

在我看来,好像它正在从XML中提到的每个drawable中生成一个bmp,然后当我调用“setBackgroundResource”时将它绑定在VM memmory中。

我的问题:有没有办法减少记忆密集度?我可以更改.setBackgroundResource如何从XML保存数据吗?像我的xml中的那些7-8个不同的图片足以打破16MB的VM。 我不想要太多,我只想要一些并排运行的动画帧,当我点击按钮时会改变,但是如果AnimationDrawable在VM-memmory中吃掉这么多,那么这似乎是不可能的。

提示?想法?替代?

2 个答案:

答案 0 :(得分:0)

请参阅此文章 - Loading large images

特别注意“将缩小版本加载到内存中”部分

答案 1 :(得分:0)

尝试将您的图片资源保存在/drawable-nodpi Android可能会将资源假设为/drawable-mdpi作为默认值。