我有一个问题:(否则我不会在这里;)
我正在创建一个具有显示“3D”模型功能的应用程序。这部分实际上是从多个角度拍摄的图像集合,并允许用户“旋转”“模型”。这个想法运行良好,但问题在于图像的加载。
我发现有两种方法:
- 将所有图像加载到内存中,然后简单地将它们切换到正确的角度。
- 根据需要加载图像 - 我们可以提前加载一些。
然而这些都有问题:
- 如果我幸运的话,这些图像会适合记忆,但事实并非如此。它们每个大约 1.5-2MB,每个模型大约有 75-100 张图像。这使总大小至少达到约 115MB。
- 如果我幸运的话,图像的加载速度会比用户“旋转”的速度快,但他们不会。用户可以轻松切换到尚未加载的角度,从而导致黑屏几秒钟。
我创建了一个加载器,它允许我简单地将我需要的图像添加到堆栈中,然后加载器将一个接一个地加载图像。如果用户滚动得相当慢,这可以正常工作。我的加载器会在完成后释放内存,所以无论我加载多少图像,只要我指定要存储在内存中的最大图像,应用程序通常不会崩溃。我的加载器可以非常快速地加载图像,但仍有几毫秒(~250ms)的时间将大图像加载到内存中。当然,加载器在不同的线程上,加载绝不会阻碍 UI 响应。这就是为什么如果用户快速来回滑动,实际上不会显示任何图像,因为加载和卸载都在同时工作,导致没有图像:)
所以,我的问题是:如何在不将所有图像加载到内存的情况下提供平滑且用户满意的图像旋转?