1

我正在开发一种动态壁纸,可以在背景上再现动画(如短视频)。

有谁知道如何有效地加载各种全屏大小的位图并将它们绘制在画布上?我尝试了两种方法,但都不是很好。


方法#1:在壁纸启动时加载所有位图。

问题:内存超出限制(约 35MB)无法加载超过 10 个位图。所以动画缺乏不同的图像。


方法 #2:仅加载 2 个位图。在运行时,绘制位图,删除旧位图,加载新位图,重复。

问题:消耗大量系统(不是内存,但通常会减慢操作系统),但是它可以工作,因为它没有超过内存限制。但是,仍然会减慢整个系统的速度。

例子:

  Drawer.drawAll(res,c,p);
  res.removeOldBitmaps();
  res.loadNewBitmaps(wpservice,display);

我想到的另一种方法是在单独的线程上加载资源,你们怎么看?您还有其他解决方案吗?

干杯!

4

1 回答 1

0

解决了,我找到的解决方案如下:

在运行时加载图像,1 x 1。

并使用此选项:

/**Effective image decoder by chelin**/
public static Bitmap decodeResource(WallpaperService wpservice,int id){

    int scale=1;
    Resources res = wpservice.getResources();
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inPreferredConfig = Bitmap.Config.ARGB_8888;
    o2.inSampleSize=scale;
    o2.inPurgeable = true;
    o2.inInputShareable = true;
    return BitmapFactory.decodeResource(res, id, o2);
}

希望它对我有用。干杯!

于 2013-01-19T15:35:46.533 回答