我将目标SDK设置为3.2,最低SDK设置为2.2,如何在我的应用程序中使用StrictMode呢?我知道它已经被引入了,但我不太清楚如何开始使用它。
我将目标SDK设置为3.2,最低SDK设置为2.2,如何在我的应用程序中使用StrictMode呢?我知道它已经被引入了,但我不太清楚如何开始使用它。
StrictMode.ThreadPolicy
自API Level 9引入,而默认的线程策略自API Level 11开始发生了改变。简而言之,不允许在UI线程上执行网络操作(例如:HttpClient
和HttpUrlConnection
)。如果这样做,会出现NetworkOnMainThreadException
异常。
您可以通过两种方式轻松解决此错误:
推荐的解决方法是使用anAsyncTask
,以便网络请求不会阻塞UI线程。
或者,您可以通过将以下代码添加到主活动的onCreate()方法中来覆盖此线程策略。
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
希望这对你有所帮助。
我的建议有两个方面:
首先,在你的 应用程序 的 onCreate()
中添加一些基线 StrictMode 代码。这样可以轻松地将 StrictMode 应用于整个应用程序(尽管您可以将此代码放在任何位置以进行更具体的测试)。在 StrictMode 文档中有很好的示例代码。
其次,在尝试使用 StrictMode 之前检测 SDK 的版本。这样,您只能在 API 版本 9 或更高版本中使用 StrictMode - 如果您不进行此检查,则会在旧版 Android 上崩溃应用程序。您可以通过查看 Build.VERSION.SDK_INT 来轻松检测 SDK 版本。
可选地,您可能希望仅在测试时启用 StrictMode。如何实现取决于您,但 我过去曾经写过一种解决方案。
Application.onCreate()
中此答案的解决方案#2没有起作用(出现了NetworkOnMainThreadException
),尽管我的日志代码被打印出来表明方法已被调用。但如果我将其放在我的主活动的onCreate()
中,则可以正常工作。 - Rock Lee<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);
}
这对于如何在应用程序中使用StrictMode非常有帮助。 查看此链接.. http://mobile.tutsplus.com/tutorials/android/android-sdk_strictmode/
通过检查API级别并执行严格模式,它有助于解决问题。