android 高清壁纸设置慢

 由于项目的需要最近在解决一个 bug  在1080p 的手机上面设置壁纸会很慢慢,慢的原因是和壁纸 的大小 有关,壁纸越大,时间直越长,一般1080 p 的壁纸大概有10M左右,

所以通过文件流 来保存会比较慢一般也在6~7S,用户体验特别差。所以需要优化。

   下面说一下设置的流程,用户进程直接获取WallpaperManager,然后调用public void setBitmap(Bitmap bitmap) throws IOException  设置壁纸,一般设置有三种方式, public void setResource(int resid) throws IOException和
    public void setStream(InputStream data) throws IOException ,不管用什么方法都比较慢,开机启动的时候会启动WallpaperManagerService来管理壁纸,同时会生成一个文件监视器, FileObserver mWallpaperObserver监听壁纸文件(4.2的版本:/data/system/users/0/files/wallpaper),如果 文件被重写或者被修改都会触发刷新wallpaper ,具体方法: bindWallpaperComponentLocked(mImageWallpaperComponent,true, false);//刷新壁纸。
        saveSettingsLocked();//保存壁纸。

在bindWallpaperComponentLocked中会启动SystemUi下面的ImagerWallpaper,然后通过WallpaperManagerService来decode一张Bitmap,再刷新绘画界面,感觉流程还是比较乱的,对于高清壁纸来说慢慢的原因,decode 生成一张 Bitmap  的时候太长,所以我们可以直接保存设置的bitmap 在WallpaperManagerService里面,先刷新界面再保存,好了说一下具体修改吧。

情况一:用户通过setBitmap的方式来设置壁纸的优化。

    在interface IWallpaperManager接口添加setWallpapperBitmap和getWallpaperBitmap 还有一个刷新界面方法 refreshWallpaper,然后 在WallpaperManagerService实现方法,声明成员变Bitmap bitmap ,public void setWallpaperBitmap (Bitmap bitmap){

this.bitmap = bitmap;}

public void getWallpaperBitmap(){

return bitmap};

然后在修改WallpaperManager  的setBitmap方法,sGlobals.mService.setWallpaperBitmap(bitmap),再调用sGlobals.mService.refreshWallpaper刷新界面。这样用户看起来很快,但设置壁纸的对话框还是很久在才消失,因为保存图片是在客户端进程中运行的,所以我们可以开一个线程来保存图片,new Thread(){

 try {
            ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(null);
            if (fd == null) {
                return;
            }
            FileOutputStream fos = null;
            try {
                fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
                bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
            } finally {
                if (fos != null) {
                    fos.close();
                }
            }
        } catch (RemoteException e) {
            // Ignore
        }

}。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

คิดถึง643

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值