Android 如何减少内存泄漏
我知道有很多问题要问,但我似乎什么都不懂,因为我对这个记忆问题还不熟悉。我有一个应用程序,允许用户从图库中选择一张图片,或者拍摄一张图片,然后让他们添加评论。在一个页面,我想至少有10张图片,但目前我只能有3张。有人能帮我做这个吗。我需要一个循序渐进的代码,以帮助减少我的内存不足。请参阅下面的代码 有一个按钮,用户点击添加图片Android 如何减少内存泄漏,android,memory-leaks,bitmap,Android,Memory Leaks,Bitmap,我知道有很多问题要问,但我似乎什么都不懂,因为我对这个记忆问题还不熟悉。我有一个应用程序,允许用户从图库中选择一张图片,或者拍摄一张图片,然后让他们添加评论。在一个页面,我想至少有10张图片,但目前我只能有3张。有人能帮我做这个吗。我需要一个循序渐进的代码,以帮助减少我的内存不足。请参阅下面的代码 有一个按钮,用户点击添加图片 private void imgoption() { // TODO Auto-generated method stub CharSeque
private void imgoption() {
// TODO Auto-generated method stub
CharSequence[] names = { "From Gallery", "From Camera" };
new AlertDialog.Builder(context)
.setTitle("Select an option for updating your Profile Picture")
.setItems(names, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int pos) {
// TODO Auto-generated method stub
if (pos == 0) {
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, GET_GAL_IMG);
} else {
Intent i = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, GET_CAM_IMG);
}}}
)
.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
}
}).create().show();
}
之后,这就是我在这里看到的,用户从图库或相机中选择图片,然后这是如何显示从URI转换为位图,然后调整位图大小。我尝试过使用ByteArrayOutStram,但似乎不起作用(主要是因为我不确定它是如何工作的)。从另一篇文章中,我听说使用inSample size更好,但我没有合适的方法来实现(不确定在哪里包含该代码或如何实现)
请帮我做这个。我搜索这个答案已经一个多月了,但是没有找到。我真的很感激逐步指导,因为我是新手。谢谢您内存泄漏的一个原因可能是您的流处理:
您正在打开许多流,但我现在看到了关闭它们的代码
bmp = BitmapFactory.decodeStream(
getContentResolver().openInputStream(selectimage));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
我想你应该看看Android开发者网站上的这个话题:谢谢你的回复,我已经看过LruCache了,但不确定它会如何在我的代码中实现。开发者网站上提供的示例非常简单,甚至是一步一步。我强烈建议你下载它,并尝试使其适应你的应用程序。尝试下载示例,但链接断开。我想我得想个办法。谢谢你的努力。谢谢你。没问题。我刚从网上下载的。您可能想再试一次。请告诉我如何关闭它们。我使用的是我前面看到的一个教程中的代码。您可以调用baos.close()代码>尝试过,但没有帮助。只是想尝试其他东西
bmp = BitmapFactory.decodeStream(
getContentResolver().openInputStream(selectimage));
ByteArrayOutputStream baos = new ByteArrayOutputStream();