android2.新的APIxa0StrictMode介紹
在android中,google.StrictMode增加到3中 API設(shè)置了一個(gè)thread策略(ui進(jìn)程或分流程),它主要測(cè)試了讀寫操作、訪問網(wǎng)絡(luò)、數(shù)據(jù)庫讀寫等耗時(shí)操作,并將其直接打印為log或dialog。通過對(duì)這些日志的分析,可以盡早找出程序運(yùn)行緩慢的原因,從而優(yōu)化代碼,防止ANR(Application Not Responding)窗子的出現(xiàn)。
使用StrictMode
建議使用StrictMode的方法是,在開發(fā)階段,打開它,在發(fā)布應(yīng)用之前關(guān)閉它。
例如:在你的應(yīng)用中,onCreate():
代碼Java
1. public void onCreate() {
2.
3. if (DEVELOPER_MODE) {
4. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() StrictMode///結(jié)構(gòu)
5.
6. .detectDiskReads() ///當(dāng)硬盤閱讀操作發(fā)生時(shí)導(dǎo)出
7.
8. .detectDiskWrites()//當(dāng)硬盤寫作操作時(shí)導(dǎo)出。
9.
10. .detectNetwork() //在訪問網(wǎng)絡(luò)時(shí)導(dǎo)出,可替換為detectAll() 它涵蓋磁盤讀寫和網(wǎng)絡(luò)I/O
11.
12. .penaltyLog() ///以日志的形式導(dǎo)出
13.
14. .build());
15.
16. StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
17.
18. .detectLeakedSqlLiteObjects() //檢測(cè)SQLite數(shù)據(jù)庫操作
19.
20. .penaltyLog() ///以日志的形式導(dǎo)出
21.
22. .penaltyDeath()
23.
24. .build());
25.
26. }
27.
28. super.onCreate();
29.
30.
當(dāng)觸發(fā)策略中的操作時(shí),系統(tǒng)會(huì)打印出一個(gè)StrictMode日志,格式如下:
代碼Java
1. 02-27 10:03:56.122: DEBUG/StrictMode(16210): StrictMode policy violation; ~duration=696 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2
2. 02 02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:745)
另外還有兩點(diǎn):
1.android2.3版本直接訪問ui過程中的網(wǎng)絡(luò)會(huì)報(bào)錯(cuò)。
2.ANR窗口會(huì)彈出程序堵塞或超過5秒的計(jì)算時(shí)間。
本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請(qǐng)?jiān)谖闹凶⒚鱽碓醇白髡呙帧?/p>
免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)及時(shí)與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com


