Android 如何减少内存泄漏

Android 如何减少内存泄漏,android,memory-leaks,bitmap,Android,Memory Leaks,Bitmap,我知道有很多问题要问,但我似乎什么都不懂,因为我对这个记忆问题还不熟悉。我有一个应用程序,允许用户从图库中选择一张图片,或者拍摄一张图片,然后让他们添加评论。在一个页面,我想至少有10张图片,但目前我只能有3张。有人能帮我做这个吗。我需要一个循序渐进的代码,以帮助减少我的内存不足。请参阅下面的代码 有一个按钮,用户点击添加图片 private void imgoption() { // TODO Auto-generated method stub CharSeque

我知道有很多问题要问,但我似乎什么都不懂,因为我对这个记忆问题还不熟悉。我有一个应用程序,允许用户从图库中选择一张图片,或者拍摄一张图片,然后让他们添加评论。在一个页面,我想至少有10张图片,但目前我只能有3张。有人能帮我做这个吗。我需要一个循序渐进的代码,以帮助减少我的内存不足。请参阅下面的代码

有一个按钮,用户点击添加图片

      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();