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

}。

转载于:https://www.cnblogs.com/snake-hand/p/3190167.html

android 高清壁纸设置慢相关推荐

  1. android壁纸软件代码,android高清壁纸APP完整源码HD Wallpaper(服务端+客户端)

    描述 android高清壁纸APP完整源码HD Wallpaper with Material Design,包含android客户端源码.php+mysql服务端源码,带文档 "HD Wa ...

  2. python:抓取必应高清壁纸第一张并设置为壁纸 修改注册表 重启壁纸不丢失

    # -*- coding: utf-8 -*- import requests from lxml import etree #import re from re import split #bing ...

  3. Android 12壁纸,Android12壁纸下载-Android12壁纸高清壁纸大全 v1.0-友情手机站

    Android12壁纸,首个开发者预览版已经推出了,不少用户们都很期待新的系统会有那些改变,今天就上线了7张安卓12高清壁纸,大家可以直接下载保存到手机上,随着新的系统更新,对功能也进行的更新升级,还 ...

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

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

  5. android6.0原生壁纸,安卓6.0原生壁纸 androidM6.0自带高清壁纸下载

    安卓系统6.0正式命名为Marshmallow棉花糖,有网友将安卓6.0系统自带壁纸提取出来,下面是androidM6.0自带高清壁纸下载资源. 安卓6.0原生壁纸 androidM6.0自带高清壁纸 ...

  6. 10个值得珍藏的4K高清壁纸网站推荐

    作为打开电脑 or 手机第一眼就看到的桌面,给它设置一个赏心悦目的桌面壁纸还是必不可少的. 下面分享了 10 个值得珍藏的高清桌面壁纸网站,支持各种图片比例和分辨率,从 720P 到 4K.8K 应有 ...

  7. 11个值得珍藏的4K高清壁纸网站推荐

    前言 由于前几天因需求须找一些视觉素材,翻来覆去整了一些,整理了10个图片素材网站可以给大家收藏使用& 作为打开电脑 or 手机第一眼就看到的桌面,给它设置一个赏心悦目的桌面壁纸还是必不可少的 ...

  8. python爬虫--王者荣耀高清壁纸下载(多线程)

    下面的代码是采用多线程的生产者消费者模式,下载速度比之前文章的普通下载快一点. 普通下载的链接:python爬虫–王者荣耀高清壁纸下载 代码在下载方面是没有问题的,可以直接运行,就是在收集打不开链接的 ...

  9. Pap.er 3.5.4 中文版 (专为Mac设计的高清壁纸应用)

    pap.er mac版是一款专为mac用户设计的4K.5K高清壁纸应用,让您可以每天享受来自全球新鲜精美的壁纸!Pap.er拥有美观的界面,自动换取壁纸,千万海量精美壁纸任您选. 高清壁纸 Pap.e ...

最新文章

  1. 华为云计算基础-华为云计算套件
  2. 奥巴马访华:不建议过度审查 提倡加强互联网开放
  3. 【C/C++】理解传值引用和调用引用:函数调用中,为变量赋值,传入其指针;为指针赋值,传入指针的指针
  4. python爬虫怎么挣钱_2019如何学Python?这里有你需要的答案
  5. 基于c语言编写的五子棋小游戏
  6. Java零基础到进阶(真的零基础,也可以当笔记看~)
  7. laravel 邮件发送
  8. Cortex-M3处理器出众的控制和连通性
  9. 教你如何写出高质量的网络推广软文
  10. 腾讯企业邮箱单点登录 php,腾讯企业邮箱集成的坑
  11. 基于vue2+element+springboot+mybatis+jpa+mysql的学籍管理系统
  12. 单片机c语言sfr,51单片机bit、sbin、sfr、sfr_16区别分析
  13. c语言顺序选择结构题库,C语言复习题顺序结构
  14. android notification设置提示音
  15. Windows CE 模拟器和远程调试工具
  16. Yii2 User 登录原理
  17. 计算机教师道德模范事迹材料,道德模范教师事迹材料:青春无悔,追求永恒
  18. OCP/OCA认证考试指南全册读书笔记 第一章 Oracle Database 11g体系结构概述
  19. GMP认证|企业需依据产品特性制定卫生标准程序
  20. 微信html5测试工具,FAutoTest- 微信小程序 / 公众号 H5 自动化利器

热门文章

  1. myeclipse6.0.1(内置了eclipse)安装及其配置
  2. Python的Linux的入门,学习摘要。
  3. 批量删除某个目录下的 某类型文件方法
  4. php array product,PHP array_product()用法及代码示例
  5. python股票接口_使用SINA接口获取实时股票信息
  6. 688:画圈游戏(思维)
  7. “御术”林峰:前端10年,始终坚信“为生活带来美好的改变”
  8. 特稿 | OceanBase 连破纪录:蚂蚁技术人的砥砺前行
  9. 史上最强《Java 开发手册》泰山版王者归来
  10. 鹅厂又赢了!游戏不再是玩家的资产,我们只有“使用权”不能交易