我正在开发Android应用程序。该应用程序有一个列表视图,每个项目包含一个图像显示。一个屏幕通常可以包含大约3张图像。我正在用一些真正的相机拍摄未压缩的图像进行测试,每个图像大约在1.5M左右。事实证明,滚动真的很慢并且卡住了。我想知道这是因为Android操作系统的实现,还是我有错用法?大图像的列表视图很慢
这里的细节:
在ListView中,我有一个ViewHolder保持所有项目实例,这样它会比做findViewById
更快。在此列表视图的活动加载时,我将旋转一些图像加载器AsyncTasks来帮助加载图像。我的图像加载器是作为单例实现的,并且具有两级缓存。所述第一级高速缓存是一个SoftReference
Map
:
private Map<String, SoftReference<Bitmap>> l1ImageCache =
new HashMap<String, SoftReference<Bitmap>>();
和L2高速缓存是一个缓存文件夹。如果缓存无法访问,代码将执行异步下载并更新视图。整个LoadImage代码路径位于我的AsyncTask实现和UI线程的一部分中。
问题是,似乎缓存工作正常,图像加载速度相当快(从内存加载需要大约10毫秒),但滚动仍然卡住。
12-15 21:56:46.622: I/Choreographer(5803): Skipped 62 frames! The application may be doing too much work on its main thread.
如果我将图像从每个1M改为100K,图像视图变得非常平滑。
我想知道这是否是操作系统限制?或者有什么是错的?
使用asynctask加载位图 –
尝试使用通用图像加载器https://github.com/nostra13/Android-Universal-Image-Loader – SathishKumar
你可以在将图像添加到列表视图之前缩放图像? –