為了獲得更多出現(xiàn)在代碼中的關(guān)于公共問題的信息,我們激活了StrictMode模式。
StrictMode幫助我們偵測敏感的活動,如我們無意的在主線程執(zhí)行磁盤訪問或者網(wǎng)絡(luò)調(diào)用。正如你所知道的,在主線程執(zhí)行繁重的或者長時的任務(wù)是不可取的。因?yàn)锳ndroid應(yīng)用的主線程時UI線程,它被用來處理和UI相關(guān)的操作:這也是獲得更平滑的動畫體驗(yàn)和響應(yīng)式App的唯一方法。
為了在我們的App中激活StrictMode,我們只需要在MainActivity中添加幾行代碼,即onCreate()方法中這樣:
@Override
public void onCreate() {
super.onCreate();
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());
}
}
我們并不想它總是激活著,因此我們只在debug構(gòu)建時使用。這種配置將報(bào)告每一種關(guān)于主線程用法的違規(guī)做法,并且這些做法都可能與內(nèi)存泄露有關(guān):Activities、BroadcastReceivers、Sqlite等對象。
選擇了penaltyLog(),當(dāng)違規(guī)做法發(fā)生時,StrictMode將會在logcat打印一條信息。