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