2013-08-07 39 views
2

我從android文檔StrictMode.ThreadPolicy.Builder轉換爲StrictMode.ThreadPolicy.BuilderStrictMode.ThreadPolicy.Builder目的和優點?

我對StrictMode.ThreadPolicy.Builder沒有清楚的瞭解。
當我們必須使用這個類StrictMode.ThreadPolicy.Builder
StrictMode.ThreadPolicy.Builder的優點和目的是什麼。
我要爲

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
.detectAll() 
.penaltyLog() 
.build(); 
StrictMode.setThreadPolicy(policy); 
+0

您是否閱讀過[StrictMode'上的博客文章](http://android-developers.blogspot.co.nz/2010/12/new-gingerbread-api-strictmode.html)? –

回答

2

你的應用程序中定義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策略(清單中的標誌必須在發佈之前被刪除)。

希望它有幫助。