StrictModeBuilder许可证无法正常工作

时间:2012-07-23 07:35:25

标签: android android-strictmode

我确实有一个拒绝在Android 4.1设备上运行的旧应用。这是在这里跳过的NetworkOnMainThreadException。

所以我尝试通过以下步骤允许此操作 - 但这些都不起作用。我用4.1模拟器测试了它。真正需要解决这个错误 - 应用程序重写是没有选择的。目前,我从我的应用中排除了4.1设备。

班级档案......

public class StrictModeWrapper {

    static {
        try {
            Class.forName("android.os.StrictMode");
        } catch (Exception exception) {
            throw new RuntimeException(exception);
        }
    }

    public static void checkAvailable() {
    }

    @SuppressLint("NewApi")
    public static void setThreadPolicy() {
        StrictMode.ThreadPolicy strictModeThreadPolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(strictModeThreadPolicy);
    }
}

...在扩展的Application类中调用:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        try {
            StrictModeWrapper.checkAvailable();
            StrictModeWrapper.setThreadPolicy();
            } catch (Throwable throwable) {
        }
    }
}

扩展的Application类在Manifest中注册并正常工作。

2 个答案:

答案 0 :(得分:2)

自api 11以来StrictMode似乎没有任何变化。它必须是您使用的其他一些Android类的更改,这会导致违反StrictMode政策。

Android文档本身说

  

“但不要觉得有必要修复StrictMode找到的所有内容。”

但是,因为它是NetworkOnMainThreadException你必须彻底检查。查看应用中的所有网络通信,并确保它们不会阻止您的主线程。

并确保在发布版本中删除/禁用StrictMode代码,因为它只是用于识别意外错误的开发人员工具。

更新

你的应用程序崩溃是因为:

  • 您尚未阻止发布版本中StrictMode策略设置代码的执行。它应该只在测试时执行。
  • 导致严格模式政策在StrictMode之后重置的onCreate类发生了变化。

我有两个问题:

  1. 崩溃是否表明StrictMode策略正在运行?违反了政策,因此崩溃了。
  2. 是否表示您的应用中存在阻止主线程的网络代码?

答案 1 :(得分:2)

StrictMode在Android版本> = 16上的行为与先前版本不同。文档建议在扩展的Application,Activity等的onCreate()中发出StrictMode调用。扩展应用程序中至少onCreate()现在工作不同,并且证明文档错误(截至今天)。

这是StrictMode文档,它描述了如何将StrictMode调用添加到扩展应用程序(例如,今天的错误):

StrictMode

以下是描述问题的Google代码问题,并提供了解决方法:

Google Code Issue 35298