布局中存在一个ImageSwitcher和一个ImageButton,按下ImageButton后释放Bitmap数组中的数据(其中有一张正被ImageSwitcher使用),再调用finish()结束Activity,如下:
private void finishUserGuid() {
for (int i = 0; i < bitmapBuffer.length; i++) {
if (bitmapBuffer[i] != null) {
bitmapBuffer[i].getBitmap().recycle();
}
}
finish();
}
这个方法调用完成以后就会报异常,提示正在被绘制的Bitmap被recycle了。如果按back键退出Activity就不会出现这种情况。
我试着调用Context.runOnUiThread来执行释放数据和finish(),问题仍然存在。最后解决办法是在释放之前先把ImageSwitcher设置为View.GONE,如下:
private void finishUserGuid() {
mSwitcher.setVisibility(View.GONE);
for (int i = 0; i < bitmapBuffer.length; i++) {
if (bitmapBuffer[i] != null) {
bitmapBuffer[i].getBitmap().recycle();
}
}
finish();
}
看来是finish()调用完成以后又刷新屏幕了。
万恶的P1000啊。
补充于:2011.11.21
理解有误,调用finish之前释放资源有问题,在onDestroy里面释放就没有问题不需要使用上面的方案了。
补充于:2011.11.24
正常调用finish(),然后在onDestroy()中释放Bitmap在一些2.X机器上还是会出问题,最终解决方案是调用finish()之前先把ImageSwitcher置为View.GONE,然后onDestroy()里面释放Bitmap资源。