【问题标题】:Android ListView with lots of same drawables performance具有许多相同可绘制性能的 Android ListView
【发布时间】:2012-06-05 12:35:33
【问题描述】:

我正在开发一个带有列表视图的 Android 应用,其中包含许多可绘制对象。 它们中的大多数是相同的,所以我尝试使用一个 HashMap,它在需要时返回相同的分配位图,但仍然有很多分配和 GC 操作,因此列表在滚动时会不时卡住。

在这种情况下我可以做些什么来优化性能?

缓存方法-loadImageUsing google code

mImageWorker.loadImage(pic_url, holder.pic);
holder.*some bitmap*.setImageBitmap(Utility.getBitmap(context, id); //can be one of 5 bitmaps do I use caching with a hashMap

【问题讨论】:

    标签: android performance listview android-listview drawable


    【解决方案1】:

    see this example 这会对你有所帮助....

    不要在 getView() 方法下放置这么多的过程。这将缺乏列表视图滚动性能 如果您想对位图转换或任何东西进行图像处理或可绘制......只需完成所有过程 在加载适配器之前.. 并为 getView() 中的每一行分配值...

    【讨论】:

    • 谢谢,但我认为 GC 是问题所在,它只有在 GC 工作时才会卡住,并且在我滚动时才会发生。
    【解决方案2】:

    尝试使用缓存的延迟加载技术,你可以在网上找到很多教程:

    You have to see this SO thread

    另见:

    Multithreading For Performance,Gilles Debunne 的教程。

    这是来自 Android 开发者博客。建议的代码使用:

    1. 异步任务。
    2. 硬的、有限大小的 FIFO 缓存。
    3. 一种软的、易于垃圾收集的缓存。
    4. 下载时的占位符 Drawable。

    【讨论】:

    • 你的drawable的大小和数量?您如何将 getview() 用于您的列表,我们需要一些代码
    • 300 个可绘制对象,50 个独特的。我会用一些代码更新帖子。谢谢。
    【解决方案3】:

    如果您想优化代码,请尝试使用延迟加载概念来加载列表中的图像。请参考:Lazy Load images on Listview in android(Beginner Level)?

    【讨论】:

    • 谢谢,我使用了一个惰性图像加载器,问题在于我的项目中存在的一些可绘制对象而不是网络上的一些可绘制对象,其中一个需要位于每个单元格中,因此我认为它会再次分配...
    • 您是否使用位图,如果是,则在使用位图后立即调用 recycle() 方法。还可以为您的位图使用 inSampleSize 将它们缩小到 1/8 大小
    • 大小为 1-3 kb。使用 listView (带有多个适配器)时,我怎么知道何时完成?谢谢。
    • 只要将位图图像设置为某个资源,例如 imageView.setImageBitmap(bmp);您的“bmp”(位图)不再需要,只需在此语句后清除位图即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多