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
}
}。
android 高清壁纸设置慢的更多相关文章
- Android 高清加载巨图方案 拒绝压缩图片
Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自:[张 ...
- Android高清巨图加载方案
1.今天看了鸿洋的<Android高清巨图加载方案>一文,对加载高清巨图时的解决方案有了一定的认识. 思路为: 提供一个设置图片的入口. 重写onTouchEvent,在里面根据用户移动的 ...
- Nginx+uWSGI+Python+Django构建必应高清壁纸站
写在前面 做这个网站的初衷是因为,每次打开必应搜索搜东西的时候都会被上面的背景图片吸引,我想必应的壁纸应该是经过专业人员精选出来的,我甚至会翻看以前的历史图片,唯一美中不足的是必应的首页只能查看最多7 ...
- python 爬取王者荣耀高清壁纸
代码地址如下:http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...
- 别人用钱,而我用python爬虫爬取了一年的4K高清壁纸
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...
- Android 高清加载巨图方案, 拒绝压缩图片
源地址:http://blog.csdn.net/lmj623565791/article/details/49300989 一.概述 距离上一篇博客有段时间没更新了,主要是最近有些私事导致的,那么就 ...
- Python静态网页爬取:批量获取高清壁纸
前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...
- google浏览器高清壁纸保存
谷歌浏览器 扩展程序里边 有一个主题壁纸 好多不错的,并且是高清大图!!! 主题应用市场: https://chrome.google.com/webstore/category/themes?hl= ...
- SDWebImage -- 封装 (网络状态检测,是否打开手机网络下下载高清图设置)
对SDWebImage 进行封装,为了更好的节省用户手机流量,并保证在移动网络下也展示高清图,对使用SDWebImage 下载图片之前进行逻辑处理,根据本地缓存中是否有缓存原始的图片,用户是否打开移动 ...
随机推荐
- ECMAScript 6 Promise 对象
一.Promise的含义 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise是一个对象,从它可以获取异步操作的消息. 1. ...
- springboot + swagger2 生成api文档
直接贴代码: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-sw ...
- laravel 上传文件到亚马逊 aws s3
参考: https://github.com/aws/aws-sdk-php-laravel https://www.jianshu.com/p/e48d82bff20b
- 20165301 2017-2018-2 《Java程序设计》第九周学习总结
20165301 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十三章:Java网络编程 URL类 通常包含三部分信息:协议.地址.资源 协议必须是URL ...
- appium---【Mac】Appium-Doctor提示WARN:“ opencv4nodejs cannot be found”解决方案
报错提示: AppiumDoctor ✖. opencv4nodejs cannot be found 如下截图: 解决方案: 第一步:安装cmake并配置环境变量 1.打开terminal执行:c ...
- [转]基于Protel DXP软件的PCB高级编辑技巧大全
来源:基于Protel DXP软件的PCB高级编辑技巧大全 一.放置坐标指示 放置坐标指示可以显示出PCB板上任何一点的坐标位置. 启用放置坐标的方法如下:从主菜单中执行命令 Place/Coordi ...
- XINCLUDE
前言 导入外部xml文档,类似于php的include,将外部定义的dtd引入当前文件,因为引入外部实体具有局限性,所以使用xinclude来引入 语法 导入外部文档: <xi:include ...
- React Native 系列(九)
前言 本系列是基于React Native版本号0.44.3写的.很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容.那么这篇文章将介绍RN中的Tab标签组件. ...
- 【BZOJ 3144】 3144: [Hnoi2013]切糕 (最小割模型)
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1764 Solved: 965 Description Inp ...
- BZOJ 2938 [Poi2000]病毒(AC自动机)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2938 [题目大意] 给出一些病毒串,问是否存在不包含任何病毒串的无限长的字符串 [题解 ...