Android 相机位图内存泄漏
Android camera Bitmap memory leak
我写了一个简单的代码来拍照,然后使用ImageView将它显示到屏幕上。但是,有一些内存泄漏,我没有发现。 (拍照后内存从7MB变成39MB)
public class MainActivity extends Activity {
public String gl;
ImageView viewImage;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.myButton);
viewImage = (ImageView) findViewById(R.id.myImageView);
}
public void launchCamera(View view) {//Button onClick method
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
gl = f.getAbsolutePath();
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(i, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
Bitmap bitmap;
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeFile(gl, bitmapOptions);
viewImage.setImageBitmap(bitmap);
}
}
}
这是link:
我在其中给出了从 Camera
拍摄照片然后在 ImageView
中显示的有效方法。
希望对你有所帮助
图片在内存中可能很大,每个像素在内存中占用 32 位。
您应该加载缩小版本的图片,而不是完整尺寸的图片。
我什至很惊讶你加载超过 2048*2048 像素的图像时没有收到错误消息。
我写了一个简单的代码来拍照,然后使用ImageView将它显示到屏幕上。但是,有一些内存泄漏,我没有发现。 (拍照后内存从7MB变成39MB)
public class MainActivity extends Activity {
public String gl;
ImageView viewImage;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.myButton);
viewImage = (ImageView) findViewById(R.id.myImageView);
}
public void launchCamera(View view) {//Button onClick method
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
gl = f.getAbsolutePath();
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(i, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
Bitmap bitmap;
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeFile(gl, bitmapOptions);
viewImage.setImageBitmap(bitmap);
}
}
}
这是link:
我在其中给出了从 Camera
拍摄照片然后在 ImageView
中显示的有效方法。
希望对你有所帮助
图片在内存中可能很大,每个像素在内存中占用 32 位。
您应该加载缩小版本的图片,而不是完整尺寸的图片。 我什至很惊讶你加载超过 2048*2048 像素的图像时没有收到错误消息。