Android快速位图加载

Ily*_*man 7 android load bitmap

我有一块想要在屏幕上加载的图像.所有图像都是我下载并存储在SD-CARD上的文件.

到目前为止,我发现了两种方法,首先是在活动开始时将它们加载到主线程上(我得到了大约70个图像,所有加载它们需要大约2.1秒).

另一种方式是我现在正在测试的.将它们加载到分离的线程上,同时我可以为用户显示加载动画.现在我使用ThreadPoolExecutor实现了4.3秒.我在10个线程上做到了.

最后一种方法,(这是我唯一没有测试的方法)是使用精灵表.

我不能使用应用程序缓存,因为在我的应用程序中我有很多屏幕,每个屏幕都有自己的图像集.

您怎么看?加载大量图像的最快方法是什么?您知道哪些加速技术可以帮助我?

Poi*_*ull 9

  1. 不要加载主线程.如果你阻止主线程,你有2.1秒的延迟,你接近被ANR(app无响应)错误杀死.

  2. 在单独的线程中加载.不要创建10个线程,而是创建一个AsyncTask,并在doInBackground依次加载所有图像.

    在AsyncTask中加载应该与主线程中的加载(几乎)相同.不要放太多花哨的动画,这样主线程不会消耗太多的CPU时间.


Pra*_*gar 2

一种选择是使用 Wea​​kReference 创建图像缓存,以便在系统遇到内存不足的情况时从内存中删除图像。这样您就可以将图像保留在内存中,并且仅当图像不在内存中时才需要从 SD 卡加载。因此,您当前的活动将始终保留对所需位图的硬引用,而图像缓存将保留对位图的弱引用。

以下是有关弱引用的更多信息:

JavaDoc 弱引用

StackOverflow 帖子讨论使用弱引用进行缓存