2011-11-24 30 views
2

我将目标sdk设置为3.2,最小sdk设置为2.2,我如何在我的应用程序中使用strictmode,据我所知,它已经推出但无法真正了解如何开始使用它。Android 2.2中的严格模式

回答

7

我的建议是两方面:

首先,添加一些基线StrictMode codeApplicationonCreate()。这使您可以以简单的方式将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

0

请参阅以下链接了解如何使用它。 设置它的相关组件的OnCreate或应用程序

Strict Mode

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的

+0

不是应该detectAll?对不起,官方的Android文档像往常一样模糊。 – Radu

0

它有助于在通过检查API级解决问题,然后执行严格的模式具有更高的这段代码就会被激活。

15

StrictMode.ThreadPolicy自从API等级11,这在短,不允许网络操作

(如API等级9,默认的线程策略已经改变引入和HttpUrlConnection)在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); 
} 

希望这有助于你..

+0

圣诞快乐!了解strictmode终于揭示了这些错误!学习异步事物的时间! :) – Starwave