android 高清壁纸设置慢
??? 由于項(xiàng)目的需要最近在解決一個 bug? 在1080p 的手機(jī)上面設(shè)置壁紙會很慢慢,慢的原因是和壁紙 的大小?有關(guān),壁紙越大,時間直越長,一般1080 p 的壁紙大概有10M左右,
所以通過文件流?來保存會比較慢一般也在6~7S,用戶體驗(yàn)特別差。所以需要優(yōu)化。
?? 下面說一下設(shè)置的流程,用戶進(jìn)程直接獲取WallpaperManager,然后調(diào)用public void setBitmap(Bitmap bitmap) throws IOException? 設(shè)置壁紙,一般設(shè)置有三種方式,?public void setResource(int resid) throws IOException和
??? public void setStream(InputStream data) throws IOException ,不管用什么方法都比較慢,開機(jī)啟動的時候會啟動WallpaperManagerService來管理壁紙,同時會生成一個文件監(jiān)視器,?FileObserver mWallpaperObserver監(jiān)聽壁紙文件(4.2的版本:/data/system/users/0/files/wallpaper),如果 文件被重寫或者被修改都會觸發(fā)刷新wallpaper ,具體方法:?bindWallpaperComponentLocked(mImageWallpaperComponent,true, false);//刷新壁紙。
????????saveSettingsLocked();//保存壁紙。
在bindWallpaperComponentLocked中會啟動SystemUi下面的ImagerWallpaper,然后通過WallpaperManagerService來decode一張Bitmap,再刷新繪畫界面,感覺流程還是比較亂的,對于高清壁紙來說慢慢的原因,decode 生成一張 Bitmap? 的時候太長,所以我們可以直接保存設(shè)置的bitmap 在WallpaperManagerService里面,先刷新界面再保存,好了說一下具體修改吧。
情況一:用戶通過setBitmap的方式來設(shè)置壁紙的優(yōu)化。
??? 在interface IWallpaperManager接口添加setWallpapperBitmap和getWallpaperBitmap 還有一個刷新界面方法 refreshWallpaper,然后 在WallpaperManagerService實(shí)現(xiàn)方法,聲明成員變Bitmap bitmap ,public void setWallpaperBitmap (Bitmap bitmap){
this.bitmap = bitmap;}
public void getWallpaperBitmap(){
return bitmap};
然后在修改WallpaperManager? 的setBitmap方法,sGlobals.mService.setWallpaperBitmap(bitmap),再調(diào)用 sGlobals.mService.refreshWallpaper刷新界面。這樣用戶看起來很快,但設(shè)置壁紙的對話框還是很久在才消失,因?yàn)楸4鎴D片是在客戶端進(jìn)程中運(yùn)行的,所以我們可以開一個線程來保存圖片,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
??????? }
}。
?
轉(zhuǎn)載于:https://www.cnblogs.com/snake-hand/p/3190167.html
總結(jié)
以上是生活随笔為你收集整理的android 高清壁纸设置慢的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计划策略70 之 MIXED MRP(m
- 下一篇: [置顶] “河软CSDN2011级表彰暨