gpt4 book ai didi

android - StrictModeBuilder permitAll 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:13 26 4
gpt4 key购买 nike

我确实有一个旧应用程序无法在 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);
}
}

...在扩展应用程序类中调用:

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 之后重置。

我有两个问题:

  1. 崩溃是否表明 StrictMode 策略起作用了?存在违反政策的情况,因此崩溃了。
  2. 这是否表明您的应用中有一些网络代码阻塞了主线程?

关于android - StrictModeBuilder permitAll 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11608173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com