android 2.2中的严格模式

时间:2011-11-24 14:36:26

标签: android android-strictmode

我的目标sdk设置为3.2,min sdk设置为2.2,如何在我的应用程序中使用strictmode,因为据我所知它已经介绍但无法真正理解如何开始使用它。

6 个答案:

答案 0 :(得分:18)

自API级别9以来引入了

StrictMode.ThreadPolicy ,并且自API级别11以来默认的线程策略已更改,简而言之,不允许网络操作

(例如:HttpClientHttpUrlConnection)在UI线程上执行。如果您这样做,则会获得 NetworkOnMainThreadException

您可以通过两种方式轻松解决此错误: -

  1. 推荐的解决方法是使用anAsyncTask 网络请求不会阻止UI线程。

  2. 或者,您可以通过添加来覆盖此线程策略 将代码放在主要活动的onCreate()方法中。

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

    希望这对你有帮助..

答案 1 :(得分:8)

我的建议是双重的:

首先,向StrictMode codeonCreate()添加一些基线Application。这使您可以轻松地将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

答案 2 :(得分: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,则会激活此代码

答案 3 :(得分:2)

这对如何在App中使用StrictMode非常有帮助? 检查一下.. http://mobile.tutsplus.com/tutorials/android/android-sdk_strictmode/

答案 4 :(得分:0)

请参阅以下链接,了解如何使用它。 将其设置在相关组件的onCreate或Application

Strict Mode

答案 5 :(得分:0)

通过检查api级别然后执行严格模式帮助解决了这个问题。