我将 target sdk 设置为 3.2,将 min sdk 设置为 2.2,我如何在我的应用程序中使用 strictmode,据我了解它已被引入,但无法真正了解如何开始使用它。
6 回答
StrictMode.ThreadPolicy
从 API 级别 9 开始引入,并且从 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); }
希望这对你有帮助..
我的建议有两个:
首先,将一些基线StrictMode 代码添加到Application的onCreate()
. 这使您可以轻松地将 StrictMode 应用于整个应用程序(尽管您可以将此代码放在任何地方进行更具体的测试)。StrictMode 文档中有很好的示例代码。
其次,在尝试使用 StrictMode 之前检测 SDK 的版本。这样,您只能在 API 版本 9 或更高版本中使用 StrictMode - 如果您不执行此检查,您将在旧版本的 Android 上崩溃您的应用程序。您可以通过查看Build.VERSION.SDK_INT轻松检测 SDK 版本。
或者,您可能只想在测试时启用 StrictMode。您如何做到这一点取决于您,尽管我过去为此编写了一个解决方案。
将 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,此代码将被激活
这对于如何在 App 中使用 StrictMode 真的很有帮助?检查这个.. http://mobile.tutsplus.com/tutorials/android/android-sdk_strictmode/
有关如何使用它,请参阅以下链接。在相关组件或Application的onCreate上设置
它通过检查 api 级别然后执行严格模式来帮助解决问题。