这就是我想要做的事情:我正在尝试加载一系列位图来显示动画。这意味着我需要下降 fps(24 fps)。我需要加载不超过 10 秒的动画或大约 300 个位图。由于它是动态壁纸,因此我仅限于手动绘制每一帧。
这是我到目前为止所尝试的:
- 显而易见的策略:每帧加载每个位图并绘制它。这很慢。
- 使用缓存。我将位图加载放在一个单独的线程中。大约 20 个位图的缓存在后台持续加载。但是,我的性能仍然很差(大约 10 fps)。罪魁祸首是位图加载缓慢。
- 我打算尝试使用 OpenGL,但后来我意识到即使使用 OpenGL,缓慢的位图加载仍然是一个问题。对?(或者我错了吗?)
那么我还可以使用哪些其他策略呢?
这是我的想法:如果我使用 openGL,我可以使用更小的位图(因为它可以提供更好的缩放)。也许那时我可以有一个更大的缓存——比如 3 秒。使用更大的缓存,缓慢的位图加载不会成为问题,对吧?
还有其他策略吗?
哦,这是我当前的位图加载功能:
void loadNthBitmap(int i, int n) {
try {
buf = new
BufferedInputStream(assets.
open(folder+"/"
+imageList[n])
);
tmpBitmap = BitmapFactory.
decodeStream(buf);
rbitmap[i] = Bitmap.createBitmap
(tmpBitmap,
0,0,imageWidth,imageHeight,
transMatrix,false);
}
catch(IOException e) {}
}
其中imageList
是预定义的资产列表,transMatrix
是旋转和缩放矩阵。