Android 高分辨率设备(XHDPI)上GridView内存不足问题

Android 高分辨率设备(XHDPI)上GridView内存不足问题,android,gridview,out-of-memory,Android,Gridview,Out Of Memory,我正在开发一个应用程序,其中我使用了GridView,GridView中的每个图像都有一个小的描述,当我们单击显示此描述的任何图像时,我已经在不同的设备上进行了测试,它非常适合MDPI和HDPI设备,但当我在XHDPI设备(高分辨率设备)上进行测试时我的内存出了问题 我无法理解问题所在,以下是我的活动:- GridView gridView = (GridView) findViewById(R.id.grid_view); // Instance of ImageAdapte

我正在开发一个应用程序,其中我使用了GridView,GridView中的每个图像都有一个小的描述,当我们单击显示此描述的任何图像时,我已经在不同的设备上进行了测试,它非常适合MDPI和HDPI设备,但当我在XHDPI设备(高分辨率设备)上进行测试时我的内存出了问题

我无法理解问题所在,以下是我的活动:-

GridView gridView = (GridView) findViewById(R.id.grid_view);

        // Instance of ImageAdapter Class
        gridView.setAdapter(new ImageAdapter(getApplicationContext()));

        /**
         * On Click event for Single Gridview Item
         * */
        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {

                // Sending image id to FullScreenActivity
                Intent i = new Intent(getApplicationContext(), TrafficDetails.class);
                // passing array index
                i.putExtra("id", position);

                startActivity(i);

            }
        });
请帮我整理一下,任何帮助都是值得的


谢谢

您可以使用此代码获取位图:

您可以使用

final int REQUIRED_SIZE=70;
下面是从drawable文件夹获取位图的链接,您必须将这两个代码结合起来,并在应用程序中使用它


您应该在getView中使用查看支架

下面是listview示例,但可以应用于GridView:)

按如下方式进行尝试:

ImageView imageView = new ImageView(mContext);
//  TextView txt = new TextView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(
      new  GridView.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT));   
Bitmap m_d = BitmapFactory.decodeResource(mContext.getResources(), 
                                   mThumbIds[p_position]);
if (m_d != null)
{
     Bitmap resizedBitmap = Bitmap.createScaledBitmap(m_d, 100, 100, true);
     imageView.setImageBitmap(resizedBitmap);
}

这不是你的编码。是的,但语法没有问题,这是你没有正确思考和计划的方式。Android为你的应用程序分配一定数量的内存,以便在运行时使用。假设10MB的RAM(这取决于当前使用的内存量),假设您尝试加载10个图像,总共需要15MB的RAM。Android通常会给你的应用程序额外的5MB,但并不总是保证。到那时,Android只能说“内存不足”,你的应用程序就会崩溃


请参阅。

矩阵。postScale
用于减小图像的缩放大小。但此代码中未使用它,因此此处不需要它:)
ImageView imageView = new ImageView(mContext);
//  TextView txt = new TextView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(
      new  GridView.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT));   
Bitmap m_d = BitmapFactory.decodeResource(mContext.getResources(), 
                                   mThumbIds[p_position]);
if (m_d != null)
{
     Bitmap resizedBitmap = Bitmap.createScaledBitmap(m_d, 100, 100, true);
     imageView.setImageBitmap(resizedBitmap);
}