Android-BitmapFactory.decodeFile使我的应用程序缓慢

时间:2014-01-30 18:09:55

标签: android

我正在使用ActionBar Tabs和ViewPager编写应用程序。我有两个标签和两个页面。第一页只是Fragmet,第二页是ListFragment。

在第一页中,我正在反转关于平台的名称,水间隔,照片等的信息。我可以添加默认照片(来自资源)并拍摄植物照片。然后我以两种方式将照片的数据保存在像String这样的数据库中:来自资源的图像id或者保存照片的路径。

在第二页(ListFragment)中是带有自定义适配器的ListView,并且存在问题。 一行列表包含两个TextView,CheckBox和ImageView。

在我的自定义适配器的方法getView中,每一行都可以正常工作,但是将文件解码为位图需要花费大量时间,即使在解码完所有照片之后,它也会使我的应用程序正常运行。

我的代码是在每个列表行中设置图像:

private void setUpImage(int position, ImageView photo)
    {
        if(plants.get(position).getPhoto().contains("jpg"))
        {
            BitmapFactory.Options options = new BitmapFactory.Options();

            options.inSampleSize = 10;

            Bitmap bitmap = BitmapFactory.decodeFile(plants.get(position).getPhoto(), options);

            photo.setImageBitmap(bitmap);
        }
        else
        {
            photo.setImageResource(Integer.parseInt(plants.get(position).getPhoto()));
        }
    }

有谁知道如何在ListView的每个列表行中提高解码和设置图像的速度?

1 个答案:

答案 0 :(得分:2)

首先!设置options.inSampleSize = 10;要大得多。通常, inSampleSize 以2的幂提供。并且将其设置为 2或4 即可。

您可以在后台线程中解码文件,也可以使用延迟加载技术。

您可以获取延迟加载代码here。请参阅this回答。