日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 高清壁纸设置慢

發(fā)布時間:2024/8/23 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 高清壁纸设置慢 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??? 由于項(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。