效能優化篇

2021-06-02 19:32:25 字數 4501 閱讀 4418

一、在使用gallery控制項時,如果載入的過多,過大,就很容易出現outofmemoryerror異常,就是記憶體溢位。這是因為android預設分配的記憶體只有幾m,而載入的如果是jpg之類的壓縮格式,在記憶體中展開時就會占用大量的空間,也就容易記憶體溢位。這時可以用下面的方法解決:

view plain

imageview i =

newimageview(mcontext);  

bitmapfactory.options options=new

bitmapfactory.options();  

options.insamplesize = 10;

//貌似這個options的功能是返回縮圖,10即表示長和寬為原來的1/10,即面積為原來的1/100

//縮圖可以減少記憶體占用

bitmap bm = bitmapfactory.decodefile(lis.

get

(position).tostring(),options);  

i.setimagebitmap(bm);

bm.recycle();

//資源**

二、統一管理位圖資源,適時釋放資源

view plain

class

imagemanager      

public

bitmap getbitmap(

intresource)      

return

((weakreference)mbitmaps.

get(resource)).

get();     

}

return

null

;     

}

public

drawable getdrawable(

intresource)      

return

((weakreference)mdrawables.

get(resource)).

get();     

}

return

null

;     

}

public

void

recyclebitmaps()      

mbitmaps.clear();

}

public

imagemanager setactive(boolean b)      

public

boolean isactive()      

}

三、網路連線往往是耗電量比較大的那我們可以優化一下在需要網路連線的程式中,首先檢查網路連線是否正常,如果沒有網路連線,那麼就不需要執行相應的程式。

檢查網路連線的方法如下:

view plain

private

boolean isconnected()  

//判斷網路連線型別,只有在3g或wifi裡進行一些資料更新。

int

nettype = info.gettype();  

int

netsubtype = info.getsubtype();  

if

(nettype == connectivitymanager.type_wifi)  else

if(nettype == connectivitymanager.type_mobile  

&& netsubtype == telephonymanager.network_type_umts

&& !mtelephony.isnetworkroaming())  else

}

四、網路間的資料傳輸也是非常耗費資源的,這包括傳輸方式和解析方式

來看乙個**

其中 tree parse 是dom解析 event/stream是sax方式解析

很明顯,使用流的方式解析效率要高一些,因為dom解析是在對整個文件讀取完後,再根據節點層次等再組織起來。而流的方式是邊讀取資料邊解析,資料讀取完後,解析也就完畢了。

在資料格式方面,json和protobuf效率明顯比xml好很多,xml和json大家都很熟悉。

從上面的圖中我們可以得出結論就是盡量使用sax等邊讀取邊解析的方式來解析資料,針對移動裝置,最好能使用json之類的輕量級資料格式為佳。

五、傳輸資料經過壓縮

使用方法如下所示:

六、有效管理service 後台服務就相當於乙個持續執行的acitivity  如果開發的程式後台都會乙個service不停的去伺服器上更新資料,在不更新資料的時候就讓它sleep,這種方式是非常耗電的,通常情況下,我們可以使用alarmmanager來定時啟動服務。如下所示,第30分鐘執行一次。

view plain

alarmmanager am = (alarmmanager)context.getsystemservice(context.alarm_service);  

intent intent = new

intent(context, myservice.

class

);  

pendingintent pendingintent = pendingintent.getservice(context, 0, intent, 0);  

long

interval = dateutils.minute_in_millis * 30;  

long

firstwake = system.currenttimemillis() + interval;  

am.setrepeating(alarmmanager.rtc,firstwake, interval, pendingintent);  

開發過程中應該注意一些細節,並經手機的整體效能和續航都是有很大的侷限,很多個優化的細節會對軟體產生本質的影響,這些需要引起重視,也要在開發過程中不斷積累

效能優化篇

效能優化 1.首先說出效能優化的點 2.在說到ssr的時候以及節流防抖的時候 ssr為什麼能減少白屏事件 目前前後端的分離的前端專案需要先載入靜態資源,再非同步獲取資料,最後渲染頁面,在這個過程中的前兩部頁面都是沒有資料的,影響了首屏的渲染速度,也就影響了使用者的體驗 nuxt.js的概念 節流防抖...

iOS UI效能優化篇

列表元素高度動態計算會增加cpu消耗,可以進行快取,減少計算量 列表元素中的固定使用imagebyname獲取,系統會自動在記憶體中進行快取。減少列表元素的個數和層級,複雜ui可以考慮通過coregraphics繪製 減少透明view多層級使用,多個層級的透明view渲染會增加cpu消耗。離屏渲染需...

效能測試之效能優化篇

系統上線必會經歷測試階段,功能測試我們可以按照產品的設計原型去執行一條條測試用例來覆蓋產品功能點。但是在功能測試之外,如果乙個使用者介面層服務,我們還需要知道服務的效能指標以了解並評估這個服務在實際的生產環境中可以應對多大壓力,我們可以根據這個資料情況根據不用的場景時間去對應的增加機器節點或進行重構...