存储图像以便短期使用的最佳实践

时间:2012-03-11 00:19:05

标签: android memory-leaks

所以,我正在为图像使用自定义数字图块。图像存储为资源。我一直在寻找内存泄漏,并且有理由相信我存储这些图像以供使用的方法是可疑的。目前,我这样做:

private void loadImageList()
{
    Log.d(TAG,"Reloading List "+imageList);
    if (imageList==null || imageList.size()<10)
    {
        imageList=new ArrayList<Bitmap>(10);
        imageList.add(0,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number0));
        imageList.add(1,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number1));
        imageList.add(2,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number2));
        imageList.add(3,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number3));
        imageList.add(4,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number4));
        imageList.add(5,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number5));
        imageList.add(6,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number6));
        imageList.add(7,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number7));
        imageList.add(8,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number8));
        imageList.add(9,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number9));
    }
}

public void onStart()
{
    super.onStart();

    loadImageList();

}

如果我反复打开和关闭此应用程序,系统将没有足够的内存将图像添加到ImageList。我正在设置按钮的图像(当然,使用ImageButton对象)。我应该补充说应用程序是线程化的,并且此调用位于runOnUiThread(Runnable)

ImageButton.setImageBitmap(imageList.get(current_var));

我尝试删除onStop()命令中的图像,但是当线程尝试将存储在内存中的图像分配给按钮时,由于该线程的线程特性,它有时会导致崩溃。

那么,有没有更好的方法可以加载这些不会导致内存泄漏的图像?

1 个答案:

答案 0 :(得分:0)

发布此内容后我意识到了什么。我可以让imageList静态。这些图像不会从一个视图更改为下一个视图。位图不包含视图,因此内存不会锁定。在我使用它们之前,我已经检查过值是否存在。而且这个功能经常使用,保持静态内存不会影响程序的其他方面。有时它只是有助于说出来。