3

我将 target sdk 设置为 3.2,将 min sdk 设置为 2.2,我如何在我的应用程序中使用 strictmode,据我了解它已被引入,但无法真正了解如何开始使用它。

4

6 回答 6

19

StrictMode.ThreadPolicy从 API 级别 9 开始引入,并且从 API 级别 11 开始更改了默认线程策略,简而言之,不允许网络操作

(例如:HttpClientHttpUrlConnection)在 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);
 }

希望这对你有帮助..

于 2013-08-20T12:26:43.470 回答
8

我的建议有两个:

首先,将一些基线StrictMode 代码添加到ApplicationonCreate(). 这使您可以轻松地将 StrictMode 应用于整个应用程序(尽管您可以将此代码放在任何地方进行更具体的测试)。StrictMode 文档中有很好的示例代码。

其次,在尝试使用 StrictMode 之前检测 SDK 的版本。这样,您只能在 API 版本 9 或更高版本中使用 StrictMode - 如果您不执行此检查,您将在旧版本的 Android 上崩溃您的应用程序。您可以通过查看Build.VERSION.SDK_INT轻松检测 SDK 版本。

或者,您可能只想在测试时启用 StrictMode。您如何做到这一点取决于您,尽管我过去为此编写了一个解决方案

于 2011-11-24T14:49:05.107 回答
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,此代码将被激活

于 2012-09-04T13:27:45.343 回答
2

这对于如何在 App 中使用 StrictMode 真的很有帮助?检查这个.. http://mobile.tutsplus.com/tutorials/android/android-sdk_strictmode/

于 2013-04-09T05:03:52.873 回答
0

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

严格模式

于 2011-11-24T14:48:21.473 回答
0

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

于 2012-11-05T10:33:44.557 回答