【问题标题】:Strict mode in android 2.2android 2.2 中的严格模式
【发布时间】:2011-11-24 14:36:25
【问题描述】:

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

【问题讨论】:

    标签: android android-strictmode


    【解决方案1】:

    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);
     }
    

    希望这对你有帮助..

    【讨论】:

    • 圣诞快乐!了解 strictmode 终于揭开了这些错误的真相!是时候学习异步的东西了! :)
    【解决方案2】:

    我的建议有两个:

    首先,将一些基线StrictMode code 添加到您的ApplicationonCreate()。这使您可以轻松地将 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

    【讨论】:

    • 我不知道为什么,但是solution #2 in this answerApplication.onCreate() 中不起作用(得到NetworkOnMainThreadException),尽管我的日志记录代码被打印出来表明这些方法被调用了。但如果我把它放在我的主要活动的onCreate() 中,它确实有效。
    【解决方案3】:

    将 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,此代码将被激活

    【讨论】:

    • 不应该是detectAll吗?抱歉,官方的 Android 文档和往常一样模糊。
    【解决方案4】:

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

    【讨论】:

    【解决方案5】:

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

    Strict Mode

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-12
        • 2014-07-09
        • 1970-01-01
        • 2020-03-22
        • 2021-09-28
        • 2019-07-08
        • 2011-09-11
        相关资源
        最近更新 更多