你的應用程序中定義stictmode策略的好處是強迫你,在開發階段,讓你的應用更加良好的設備中表現它運行在詳細解釋:避免運行消耗在UI線程上操作,避免活動泄漏等等。 當您在代碼中定義這些代碼時,如果定義的嚴格策略遭到破壞,則會導致應用程序崩潰,這會使您修復已完成的問題(不良行爲的方法,如UI線程上的網絡操作)。
我喜歡當我開始一個新項目,以做第一的以下內容:
public class MyApplication extends Application {
private static final String TAG = "MyApplication";
@Override
public void onCreate() {
if (BuildConfig.DEBUG) {
Log.w(TAG, "======================================================");
Log.w(TAG, "======= APPLICATION IN STRICT MODE - DEBUGGING =======");
Log.w(TAG, "======================================================");
/**
* Doesn't enable anything on the main thread that related
* to resource access.
*/
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyFlashScreen()
.penaltyDeath()
.build());
/**
* Doesn't enable any leakage of the application's components.
*/
final StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
builder.detectLeakedRegistrationObjects();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
builder.detectFileUriExposure();
}
builder.detectLeakedClosableObjects()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath();
StrictMode.setVmPolicy(builder.build());
}
super.onCreate();
}
}
和應用標籤下設置的AndroidManifest.xml如下:
android:debugable="true"
以下我向你展示過,只有當它處於調試模式時,我纔會在應用程序上強制使用Strictmode策略(清單中的標誌必須在發佈之前被刪除)。
希望它有幫助。
您是否閱讀過[StrictMode'上的博客文章](http://android-developers.blogspot.co.nz/2010/12/new-gingerbread-api-strictmode.html)? –