我的目标sdk设置为3.2,min sdk设置为2.2,如何在我的应用程序中使用strictmode,因为据我所知它已经介绍但无法真正理解如何开始使用它。
答案 0 :(得分:18)
StrictMode.ThreadPolicy
,并且自API级别11以来默认的线程策略已更改,简而言之,不允许网络操作
(例如:HttpClient
和HttpUrlConnection
)在UI线程上执行。如果您这样做,则会获得 NetworkOnMainThreadException
。
您可以通过两种方式轻松解决此错误: -
推荐的解决方法是使用anAsyncTask
网络请求不会阻止UI线程。
或者,您可以通过添加来覆盖此线程策略 将代码放在主要活动的onCreate()方法中。
if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); }
希望这对你有帮助..
答案 1 :(得分:8)
我的建议是双重的:
首先,向StrictMode code的onCreate()
添加一些基线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
上答案 5 :(得分:0)
通过检查api级别然后执行严格模式帮助解决了这个问题。