由于项目的需要最近在解决一个 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
        }

}。

android 高清壁纸设置慢的更多相关文章

  1. Android 高清加载巨图方案 拒绝压缩图片

    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自:[张 ...

  2. Android高清巨图加载方案

    1.今天看了鸿洋的<Android高清巨图加载方案>一文,对加载高清巨图时的解决方案有了一定的认识. 思路为: 提供一个设置图片的入口. 重写onTouchEvent,在里面根据用户移动的 ...

  3. Nginx+uWSGI+Python+Django构建必应高清壁纸站

    写在前面 做这个网站的初衷是因为,每次打开必应搜索搜东西的时候都会被上面的背景图片吸引,我想必应的壁纸应该是经过专业人员精选出来的,我甚至会翻看以前的历史图片,唯一美中不足的是必应的首页只能查看最多7 ...

  4. python 爬取王者荣耀高清壁纸

    代码地址如下:http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...

  5. 别人用钱,而我用python爬虫爬取了一年的4K高清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...

  6. Android 高清加载巨图方案, 拒绝压缩图片

    源地址:http://blog.csdn.net/lmj623565791/article/details/49300989 一.概述 距离上一篇博客有段时间没更新了,主要是最近有些私事导致的,那么就 ...

  7. Python静态网页爬取:批量获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  8. google浏览器高清壁纸保存

    谷歌浏览器 扩展程序里边 有一个主题壁纸 好多不错的,并且是高清大图!!! 主题应用市场: https://chrome.google.com/webstore/category/themes?hl= ...

  9. SDWebImage -- 封装 (网络状态检测,是否打开手机网络下下载高清图设置)

    对SDWebImage 进行封装,为了更好的节省用户手机流量,并保证在移动网络下也展示高清图,对使用SDWebImage 下载图片之前进行逻辑处理,根据本地缓存中是否有缓存原始的图片,用户是否打开移动 ...

随机推荐

  1. C++中求类的大小

    今天刷题时看到一题,是求类的大小的,其中涉及了内存的一些知识,记录一下. 正确答案是12和9 首先是内存对齐原则,可以参考这篇博文:http://www.cppblog.com/snailcong/a ...

  2. prototype 与 __proto__

    原文:http://rockyuse.iteye.com/blog/1426510 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type= ...

  3. [Vuejs+php] MySQL数据转JSON传值到前端

    说在前面 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 优点如下[转]: 1.占带宽小(格式是压缩的) 2. js通过eval()进行Json读取(便 ...

  4. 用WP SMTP插件实现邮件发送功能

    WordPress本身是采用mail()函数发邮件的,但是这样发出的邮件很容易被放入垃圾箱,很多主机商(特别是Windows主机)为了避免用户滥发邮件直接禁用了mail()函数,还有些云计算平台(比如 ...

  5. ps | grep app 命令不显示grep app本身进程的几种方式

    ps | grep app 命令不显示grep app本身进程的几种方式 使用ps命令查询进程,常常我们不想打印出"ps | grep app"这个当前进程,比如如下: [root ...

  6. 使用 Java 查找字符串中出现次数最多的字符以及出现的次数?

    使用 Java 查找字符串中出现次数最多的字符以及出现的次数? import java.util.HashMap; import java.util.Map; public class TestStr ...

  7. JAVA编程思想读书笔记(五)--多线程

    接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...

  8. CF986B Petr and Permutations [逆序对]

    题目传送门 Petr and Permutations 格式难调,题面就不放了. 分析: 胡乱分析+猜测SP性质一波.然后被学长告知:“1~n的排列交换次数与逆序对的奇偶性相同.”然后就愉快地A了. ...

  9. 二分+并查集【bzoj3007】[SDOI2012]拯救小云公主

    Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...

  10. logging记录日志

    日志是一个系统的重要组成部分,用以记录用户操作.系统运行状态和错误信息.日志记录的好坏直接关系到系统出现问题时定位的速度.logging模块Python2.3版本开始成为Python标准库的一部分. ...