我正在开发一个需要图片库的应用程序。我正处于将所有图像显示在 GridView 中的位置。当我触摸一个图像时,我希望它用触摸的图像全屏打开一个 Activity ,这也有效,但是当我回到网格并打开另一个图像时,内存消耗不断增加。我已尝试将功能图像设置为 null
、Bitmap.recycle()
并在 Activity 上调用 finish()
似乎都没有停止当我打开不同的图像时内存消耗增加。
打开详细 Activity
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
intent.putExtra("image", adapter.file[position].getPath());
//Start details activity
startActivity(intent);
特征图像 Activity
public class DetailActivity extends AppCompatActivity {
private Intent intent = getIntent();
private Bitmap featureImage;
private ImageView featureView;
private final String TAG ="Image Detail --";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Bundle extras = getIntent().getExtras();
final String imgPath = extras.getString("image");
final BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inDensity = 2;
bitmapOptions.inTargetDensity = 1;
featureImage = BitmapFactory.decodeFile(imgPath, bitmapOptions );
featureView = (ImageView) findViewById(R.id.featureImageView);
featureView.setImageBitmap(featureImage);
}
@Override
protected void onPause(){
super.onPause();
//featureImage = null;
//featureView.setImageBitmap(null);
//featureImage.recycle();
this.finish();
}
}
内存继续增加到大约 40MB,然后下降到 32MB,并以这种模式循环。
欢迎任何提示/建议。
最佳答案
问题是您没有缩小图像以正确适应 ImageView。您有两个选择:
- 阅读并实现 this lesson 中显示的内容.这种方法的好处是你只使用你需要的代码,缺点是它需要大量的工作来做一些本应简单明了的事情。
- 使用类似Glide 的库.它使用简单并且得到了很好的支持。缺点是它确实会向您的项目添加许多原本不会使用的方法,从而增加 apk 的大小。
就个人而言,每当我必须显示图像时,我都会使用 Glide!
关于Android 在离开 Activity 时从内存中删除位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33649842/