Android在onPause中回收背景图片时, 如何避免在完成跳转前一秒钟左右的背景变黑?


在编写Android应用中,我们使用了一个比较大的背景图作为一个Activity的背景。为了防止内存溢出,我们依照google给出的建议对图片资源进行了处理。处理方法请见:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

根据这个方法处理后,在切换出这个Activity时,为了保证背景图片被回收以释放内存,我们在onPause()函数中进行了回收处理:

   
  protected void onPause() {
  
super.onPause();
BitmapDrawable bd = (BitmapDrawable)background.getBackground();
background.setBackgroundResource(0);
bd.setCallback(null);
bd.getBitmap().recycle();
}

根据ddms的监控这样做确实保证了背景图片被释放。但是造成了另外一个意想不到的效果。就是在两个activity切换的瞬间,这个被回收的背景会先一步消失,变成黑色。这个时候该activity的其他控件依然在显示中没有消失。在网络延迟或下一个activity需要做很多预先的工作的时候这种背景先消失,其他控件再消失的延迟尤为明显。

我们寻找了很久解决办法,但是网上大部分意见是集中再将下一个activity的theme设成透明。但是这并不是问题所在。因为这个情况是背景先一步于整个activity的ui界面被回收。

请问大家有什么好的办法解决么?十分感谢!

AndroidUI Android

kensou 10 years, 9 months ago

我们管理图片时一般会专门设计一个图片缓存管理器,在图片没有被用到的情况下才去回收,像你这种情况,明显图片还在被使用,当然不能被回收。

愤怒的大白 answered 10 years, 9 months ago

Your Answer