为什么展开/折叠和滚动ExpandableListView会变慢?

时间:2013-02-17 00:58:12

标签: android performance

我有ExpandableListView正常填充行的字段。但是,其中一个字段是ImageView,其中图像的路径存储在变量中。问题是扩展/折叠和scolling列表视图很慢。展开/折叠大约需要一秒钟。这是正常的吗?有没有办法让它更快?下面的代码是ImageView代码,我怀疑它是性能背后的原因(我评论它并且速度可以接受)

请让我知道可以做些什么。

String imagePath = prop.getImagePath();
if (imagePath.length() > 0) {
    Uri mainImgeUri = Uri.parse(imagePath);
    InputStream imageStream;
    try {
        imageStream = mActiviy.getContentResolver().openInputStream(mainImgeUri);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 8;
        Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options);
        holder.mainImage.setImageBitmap(yourSelectedImage);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

请注意,变量prop是从数据库获得的,imagePath作为字符串存储在DB中。数据库查询甚至在初始化列表之前发生,因此它不会影响性能。

1 个答案:

答案 0 :(得分:1)

由于getView(),我假设此代码块位于适配器的holder.main...方法内。如果是这样,这是一种可怕的做法,因为您应该理解这将对ExpandableList行中的每一行进行。在滚动和展开/折叠期间应该发出效果,因为可能会为所有这些行调用getView(),并且这些图像被外部检索。

更好的是设置一个集合来保存这些图像,然后一次批量插入它们。然后,您可以使用此图像集来填充可扩展列表。如果还没有,还要考虑使用convertView技术。