Android的AnimatedDrawable:外部分配太大,这一过程

我有两个活动,以及两个帧接一帧的动画一个非常简单的应用程序的基础上PNG文件,并在两个动画列表XML的定义。

第一届活动是一个闪屏,显示使用ImageView的 .setBackgroundResource(R.drawable.splash_animation)加载的小帧一帧动画并使用()从ImageView的 .getBackground衍生AnimatedDrawable对象中显示。

第二届活动有装载在活动的onCreate()方法的静态图像资源的ImageView的 ),以及一个按钮。

启动应用程序,第一次活动正确显示其动画。

在离开1日活动,我设置了回调,如果ImageView的 (用于获取AnimatedDrawable)为null,企图垃圾回收。 我还呼吁结束()处置1日活动。

第二届活动显示静止图像,装在的onCreate(资源),在ImageView的 。 上点击按钮,我试图通过使用同样的方法在第1活性加载的第二动画重用ImageView的

在执行行:ImageView的 .setBackgroundResource(R.drawable.main_animation),我得到的错误dalvikvm堆(8130):675000字节外部分配太大,这一进程。

这两个动画所有PNG图像文件重量在不到25万。

感谢您的帮助

PS
如果我跳过加载在第二活动的静态图片,并加载在第一活动中使用同样的动画,工作的事情。

~~~~~~~~~~~~~~ UPDATE ~~~~~~~~~~~~~~

// FIRST ACTIVITY public class FirstActivity extends Activity { boolean _isActive = true; boolean _isSplashStarted = false; AnimationDrawable _splashAnimDrawable; ImageView _splashImageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash_layout); _splashImageView = (ImageView) findViewById(R.id.splash_image_view); _splashImageView.setBackgroundResource(R.drawable.splash_animation); // animation-list xml _splashAnimDrawable = (AnimationDrawable) _splashImageView.getBackground(); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (_isSplashStarted == false) { _isSplashStarted = true; Thread splashScreenThread = new Thread() { @Override public void run() { try { int delay = 0; _splashAnimDrawable.start(); while (_isActive && (delay < 10000)) { sleep(100); delay += 100; } _splashAnimDrawable.stop(); } catch (InterruptedException e) { // TODO: handle exception } finally { finish(); Intent i = new Intent(); i.setClassName("com.blahblah.myapp", "com.blahblah.myapp.SecondActivity"); startActivity(i); } } }; splashScreenThread.start(); } } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) _isActive = false; return super.onTouchEvent(event); } // the following code does not seem to make a difference @Override protected void onDestroy() { super.onDestroy(); unbindDrawables(findViewById(R.id.splash_image_view)); System.gc(); } private void unbindDrawables(View view) { if (view.getBackground() != null) { view.getBackground().setCallback(null); } if (view instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { unbindDrawables(((ViewGroup) view).getChildAt(i)); } ((ViewGroup) view).removeAllViews(); } } } // SECOND ACTIVITY public class SecondActivity extends Activity { Button _shakeButton; // temporary until accelerometer wired up ImageView _mainImageView; AnimationDrawable _mainAnimDrawable; TextView _txtvAsk; TextView _txtvNo; boolean _isAnimationLoaded = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); // // Set up initial view // _txtvAsk = (TextView) findViewById(R.id.txt_view_ask); _txtvAsk.setVisibility(View.VISIBLE); _txtvNo = (TextView) findViewById(R.id.txt_view_no_string); _txtvNo.setVisibility(View.INVISIBLE); // set a static image seen at first _mainImageView = (ImageView) findViewById(R.id.main_image_view); _mainImageView.setBackgroundResource(R.drawable.roll_ask_me_and_shake); // // END: Set up initial view // // // Set up (temp) shake button // _shakeButton = (Button) findViewById(R.id.btn_shake); _shakeButton.setOnClickListener(new ShakeOnClickListener()); // // END: Set up (temp) shake button // } class ShakeOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { if (_isAnimationLoaded == false) { //CRASHES HERE _mainImageView.setBackgroundResource(R.drawable.roll_one_animation); // animation-list xml _mainAnimDrawable = (AnimationDrawable) _mainImageView.getBackground(); _isAnimationLoaded = true; } _mainAnimDrawable.start(); } } }

分类:安卓 时间:2015-03-15 人气:0
本文关键词: 动漫,内存,安卓
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.511 (s). 10 q(s)