其他分享
首页 > 其他分享> > android – StrictModeBuilder permitAll无法正常工作

android – StrictModeBuilder permitAll无法正常工作

作者:互联网

我确实有一个拒绝在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中注册并正常工作.

解决方法:

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

Android文档本身说

“But don’t feel compelled to fix everything that StrictMode finds. “

但由于它是NetworkOnMainThreadException,您必须进行彻底检查.查看应用中的所有网络通信,并确保它们不会阻止您的主线程.

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

更新:

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

>您尚未阻止发布版本中StrictMode策略设置代码的执行.它应该只在测试时执行.
> StrictMode类中的某些更改导致在onCreate之后重置严格模式策略.

我有两个问题:

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

标签:android,android-strictmode
来源: https://codeday.me/bug/20190626/1289403.html