Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android outOfMemory错误回收不起作用_Android_Out Of Memory - Fatal编程技术网

Android outOfMemory错误回收不起作用

Android outOfMemory错误回收不起作用,android,out-of-memory,Android,Out Of Memory,我在主屏幕上有10个小图片,当我点击这些图片时,我可以看到大图片 在这个屏幕上,我有一个按钮设置为壁纸 问题是,当我单击一些差异图片时,我有outOfMemoryError,我无法修复此错误。我尝试了一些解决方案,但我认为我的问题是有点不同 public class FullImageActivity extends Activity { Button button1; @Override public void onCreate(Bundle s

我在主屏幕上有10个小图片,当我点击这些图片时,我可以看到大图片 在这个屏幕上,我有一个按钮设置为壁纸

问题是,当我单击一些差异图片时,我有outOfMemoryError,我无法修复此错误。我尝试了一些解决方案,但我认为我的问题是有点不同

public class FullImageActivity extends Activity {

        Button button1;

      @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.full_image);

           button1=(Button) findViewById(R.id.button1);

            Intent i = getIntent();
     final int position = i.getExtras().getInt("id");


        final ImageView imageView = (ImageView) findViewById(R.id.full_image_view);




            if(position==0)
            {

                imageView.setImageResource(R.drawable.image_0);




                button1.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        WallpaperManager myWallpaperManager 
                        = WallpaperManager.getInstance(getApplicationContext());

                        try {


                            myWallpaperManager.setResource(R.drawable.image_0);

                            Toast.makeText(
                                    getBaseContext(),
                                    "Wallpaper has been updated",
                                    Toast.LENGTH_SHORT).show();

                        } 
                        catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                });


                }
我有10个像这样的位置。我的图像来自可绘制文件夹

我已经尝试过这个解决方案,但无法修复。我不知道在哪里使用它

BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.getDrawable());


            if (null != bitmapDrawable && bitmapDrawable.getBitmap().isRecycled()) {

                bitmapDrawable.getBitmap().recycle();    } 
                bitmapDrawable = null;
这里是主要活动

public class MainActivity extends Activity {
    private GridView gridView;
    private GridViewAdapter customGridAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        gridView = (GridView) findViewById(R.id.gridView);
        customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, getData());
        gridView.setAdapter(customGridAdapter);

        gridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {


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

            }
});
}

    private ArrayList<ImageItem> getData() {
        final ArrayList<ImageItem> imageItems = new ArrayList<ImageItem>();
        // retrieve String drawable array
        TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);
        for (int i = 0; i < imgs.length(); i++) {
            Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
                    imgs.getResourceId(i, -1));
            imageItems.add(new ImageItem(bitmap, "Image#" + i));
        }

        return imageItems;

    }

}
公共类MainActivity扩展活动{
私有GridView GridView;
私有GridViewAdapter customGridAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView=(gridView)findViewById(R.id.gridView);
customGridAdapter=新的GridViewAdapter(this,R.layout.row_grid,getData());
setAdapter(customGridAdapter);
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
//正在向FullScreenActivity发送图像id
Intent i=新的Intent(getApplicationContext(),FullImageActivity.class);
//传递数组索引
i、 putExtra(“id”,位置);
星触觉(i);
}
});
}
私有ArrayList getData(){
最终ArrayList imageItems=新ArrayList();
//检索字符串可绘制数组
TypedArray imgs=getResources().obtainTypedArray(R.array.image_id);
对于(int i=0;i
在主屏幕上显示10个小图片,我猜您使用的代码如下:

imageView.setImageDrawable(R.drawable.image0);
即使您的ImageView显示在屏幕的小区域上,Drawables仍会解码为全尺寸,而不是缩放以适应ImageView的大小。在设置为这些ImageView之前,应该将这些可绘制内容解码为具有适当大小的位图。
您可以查看此主题,了解如何在网站上找到解决方案。我应该使用哪一个?在哪里?正如我说的,这些代码应该修改:“for(inti=0;i