我有以下问题:
First activity
Android 相机打开,用户可以拍照。拍照后,第二个 Activity 启动。
Second activity
在此 Activity 中,用户可以查看照片。 为此,我从第一个 Activity 中收到了这样的图片:
Bundle extras = getIntent().getExtras();
然后我创建了以下位图:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
options.inDither = true;
byte[] imageData = extras.getByteArray("imageData");
myImage = BitmapFactory.decodeByteArray(imageData, 0,
imageData.length, options);
Matrix mat = new Matrix();
mat.postRotate(90);
bitmapResult = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(),
myImage.getHeight(), mat, true);
//...operations on the bitmapResult
结果位图存储在 sdcard
中,在离开此 Activity 之前,我回收了我的位图以避免内存问题:
bitmapResult.recycle();
bitmapResult=null;
完成所有这些后,我们继续进行 Activity 3。
Third activity
在此 Activity 中,用户可以看到不同尺寸的图片。图片取自sdcard
。
最大的问题是,当用户点击后退按钮时,从 Activity three
转到 Activity two
,但我的应用程序崩溃了,因为正在尝试执行 对回收后的位图进行操作。
如果我不在第二个 Activity 中回收位图,当我在我的应用程序中上下移动几次时,我会得到 OutOfMemeory Exception
。
有什么想法吗?
最佳答案
当您的用户在Activity 2 不要直接进入Activity 3(图库) . 首先,完成Activity 2,返回一个结果给Activity 1。然后开始 Activity 3。
您的第一个/主要 Activity :
public class TakeAPicture extends Activity {
public static final int REQUEST_PICTURE_WAS_TAKEN = 100;
public static final int REQUEST_SHOW_GALLERY = 101;
public static final int RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY = 102;
public static final int RESULT_BACK_FROM_GALLERY = 103;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.takeapicture);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),
PictureTaken.class);
startActivityForResult(i, REQUEST_PICTURE_WAS_TAKEN);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_PICTURE_WAS_TAKEN:
if (resultCode == RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY) {
Intent i = new Intent(getApplicationContext(), Gallery.class);
startActivityForResult(i, REQUEST_SHOW_GALLERY);
}
break;
default:
break;
}
}
}
在你的第二个 Activity 中你必须做这样的事情:
public class PictureTaken extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.picturetaken);
Button btn = (Button) findViewById(R.id.button2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PictureTaken.this
.setResult(TakeAPicture.RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY);
PictureTaken.this.finish();
}
});
}
}
问候
关于android - 在android中使用位图的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270364/