如题,由于优化内存,进行了bitmap.recycle,但是再次打开加载同一个activity的时候闪退。activity在finish的时候已经recycle,而且没有其他地方引用,居然会闪退。希望有更好的方法。求助,谢谢。代码如下:(setName之类的已经在merge中建立和声明)
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
public class DetailYS extends merge {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.merge);
setName(" ys", Color.rgb(255,255,255));
setBirthday("");
setPhone("");
setEmail("");
setUni("");
setPhoto(R.drawable.yangshun);
findViewById(R.id.floatingActionButtonCall).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DetailYS.this.onDestroy();
Intent intent = new Intent(DetailYS.this,MainActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
ImageView imageView = findViewById(R.id.app_bar_image);
if(imageView!=null){
Drawable drawable = imageView.getDrawable();
if(drawable!=null){
if (drawable instanceof BitmapDrawable){
BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
if(bitmap!=null && !bitmap.isRecycled()){
bitmap.recycle();
}
}
}
}
DetailYS.this.finish();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode== KeyEvent.KEYCODE_BACK){
DetailYS.this.finish();
Intent intent = new Intent(DetailYS.this,MainActivity.class);
startActivity(intent);
}
return true;
}
}
原因是:ImageView有两个方法来设置一张显示的图片:android:background="@drawable/aa" android:src="@drawable/aa" ,这个应该能看明白。
imageView.setImageBitmap()方法设置的是对应的src的图片,而不是background。而如果把background的图片给回收了,就导致了异常的发生。
所以修改成,去调用setBackGround()设置图片背景的方法。总之,一定要注意ImageView图片的来源问题,然后在进行相应的recycle。
头一次见这么写的,我觉得你应该在给个null,src和back在这里应该是没有区别的
还是把闪退的log贴出来吧。我个人觉得没有必要做这种内存优化因为你根本没有new bitmap,另外我不明白在onDestory回调里面为什么要调一次finish方法
如果对图片质量要求不高, 考虑对图片压缩, 转换格式