2011-11-24 69 views
2

我將目標sdk設置爲3.2,最小sdk設置爲2.2,我如何在我的應用程序中使用strictmode,據我所知,它已經推出但無法真正瞭解如何開始使用它。Android 2.2中的嚴格模式

回答

7

我的建議是兩方面:

首先,添加一些基線StrictMode codeApplicationonCreate()。這使您可以以簡單的方式將StrictMode應用於整個應用程序(儘管您可以將此代碼放在任何地方以進行更具體的測試)。 StrictMode文檔中有很好的示例代碼。

其次,在嘗試使用StrictMode之前檢測SDK的版本。這樣,您只能在API版本9或更高版本中使用StrictMode - 如果您沒有執行此檢查,則會在較早版本的Android上崩潰您的應用程序。您可以通過查看Build.VERSION.SDK_INT輕鬆檢測SDK版本。

或者,您可能只想在測試時啓用StrictMode。你如何做到這一點取決於你,儘管I've written up one solution for this in the past

0

請參閱以下鏈接瞭解如何使用它。 設置它的相關組件的OnCreate或應用程序

Strict Mode

2

將Android Manifest設置爲這樣。

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" android:maxSdkVersion="16"/> 

在onCreate方法中使用下面的代碼。

int SDK_INT = android.os.Build.VERSION.SDK_INT; 

if (SDK_INT>8){ 

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

StrictMode.setThreadPolicy(policy); 

} 

注意:禁用警告,因爲您已在檢查Android的哪個版本將使用此代碼。

如果Android版本低於Android 2.2的

+0

不是應該detectAll?對不起,官方的Android文檔像往常一樣模糊。 – Radu

0

它有助於在通過檢查API級解決問題,然後執行嚴格的模式具有更高的這段代碼就會被激活。

15

StrictMode.ThreadPolicy自從API等級11,這在短,不允許網絡操作

(如API等級9,默認的線程策略已經改變引入和HttpUrlConnection)在UI線程上執行。如果你這樣做,你會得到NetworkOnMainThreadException

您可以輕鬆地解決這個錯誤通過兩種方式: -

  1. 解決這個問題的推薦方法是使用anAsyncTask所以 的網絡請求不會阻塞UI線程。

  2. 或者,您可以通過將 以下代碼添加到主活動的onCreate()方法中來覆蓋此線程策略。

if (android.os.Build.VERSION.SDK_INT > 9) { 
    StrictMode.ThreadPolicy policy = 
    new StrictMode.ThreadPolicy.Builder().permitAll().build();  
     StrictMode.setThreadPolicy(policy); 
} 

希望這有助於你..

+0

聖誕快樂!瞭解strictmode終於揭示了這些錯誤!學習異步事物的時間! :) – Starwave