Android outOfMemory错误回收不起作用
我在主屏幕上有10个小图片,当我点击这些图片时,我可以看到大图片 在这个屏幕上,我有一个按钮设置为壁纸 问题是,当我单击一些差异图片时,我有outOfMemoryError,我无法修复此错误。我尝试了一些解决方案,但我认为我的问题是有点不同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
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