關於類StrictMode

google在android2.3中新增了StrictMode API來設置對一個thread的策略(ui線程或者分線程),它主要檢測了讀寫操作,訪問網絡,數據庫讀寫等耗時的操作並將其以log或者dialog等形式打印出來。分析這些日誌,我們可以儘快找出程序運行緩慢的原因進而優化代碼,避免ANR(Application Not Responding)窗口的出現。

啓用StrictMode 
推薦的使用StrictMode的方式是,在開發階段,打開它,在發佈應用前,關閉它。 
例如:在你的應用中,onCreate():

public void onCreate() {

    if (DEVELOPER_MODE) { 
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() //構造StrictMode
                .detectDiskReads() //當發生磁盤讀操作時輸出
                .detectDiskWrites()//當發生磁盤寫操作時輸出
                .detectNetwork()  //訪問網絡時輸出,這裏可以替換爲detectAll() 就包括了磁盤讀寫和網絡I/O
                .penaltyLog()  //以日誌的方式輸出
                .build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects() //探測SQLite數據庫操作
         
      .penaltyLog() //以日誌的方式輸出
                .penaltyDeath()
                .build());
    }
    super.onCreate();
}

當觸發策略中的操作時系統會打印出一條StrictMode日誌,格式如下:

02-27 10:03:56.122: DEBUG/StrictMode(16210): StrictMode policy violation; ~duration=696 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2 
02 02-27 10:03:56.122: DEBUG/StrictMode(16210):     at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:745)  

另外說明兩點:

1.在android2.3版本直接在ui線程中訪問網絡會報錯

2.ANR窗口會在程序阻塞或者耗時超過5秒的運算後彈出 

轉載自:http://fariytale.iteye.com/blog/1293530


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章