【Android】StrictMode


StrictMode 是 Android 自薑餅人(Gingerbread, API Level 9) 所推出的 API,目的在幫助程式開發人員撰寫品質良好的程式碼。

舉凡對磁碟機的存取(在手機上的磁碟機就是快閃記憶體)(java.io.* android.database.sqlite.* ...等等)、網路上資料的傳遞(java.net.*),Android 都認為是耗時的工作,理由可參考這篇 Android 開發小組發表的相當有名的文章:

New Gingerbread API: StrictMode

StrictMode 最主要的觀念就是主執行緒(對岸稱 主線程) 應只專注於處理 UI 而已,其他的工作都應另建 thread 去達成。

延用 SQLite - 資料庫的應用 這篇的程式稍做修改


我只存入一筆記錄,在 log 中就發現提出警告了,雖然只花了 440ms,不到 1 秒ㄟ......可見真如其名 -- STRICT -- 夠嚴格的......



再將程式碼改為在 thread 執行,


log 完全沒警告!!

而要讓程式運行更流暢,並且 thread 內的變數或程式,是看不到 UI thread 的元件的,所以還要搭配 Handler, AsyncTask, AsyncQueryHandler, and IntentService 運用。

另外,StrictMode 是用來幫助您開發程式用的,所以在正式安裝到實體 Android 設備時,就不需啟動 StrictMode;而且,StrictMode 屬於 thread 層級,也就是說,通常是您的主程式,您只要程式一開始就啟動 StrictMode 即可,不用每支子 Activity 或子程式都啟動,除非他們是在另外的執行緒跑。


第一個 if 是判斷是否為開發模式,第二個 if 是如果在舊 Android 版本執行時就不啟動 StrictMode。