java - Android 的 StrictMode - 如何正确使用它,为什么没有它我的应用程序无法运行?

标签 java android multithreading

我已经开始研究一些简单的概念,例如绑定(bind) ListView 和将 JSON 数据提取到填充 ListView 的适配器。该示例附带以下代码:

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .detectAll()
            .penaltyLog()
            .build();
        StrictMode.setThreadPolicy(policy);

一开始我并不太在意

// Testing only. Do NOT USE IN PRODUCTION!

评论,直到我删除策略代码,这导致我的应用程序在每次返回 HttpResponse 时开始抛出 ANR。

看起来我遇到了“android.os.NetworkOnMainThreadException”异常。现在,我可以理解为什么您不希望在您的 UI 线程上运行任何网络代码,但是如果 StrictMode 可以保证抛出运行时异常,为什么它甚至允许您首先这样做?

同样,有人可以解释一下上面的 StrictMode fragment 吗?我已经阅读了有关它的 Android 开发文档,但对于它如何允许代码运行我仍然有些困惑。

我唯一的理论是下面的伪解释:

对于当前线程,检测所有非法操作。记录问题,但忽略它。设置当前线程的策略以使用此规则。

我接近了吗?

最佳答案

从 api 9 开始,您不能直接在主线程上调用网络操作,而是可以使用 AsyncTask 来调用。看看这个tutorial获取更多信息。

关于java - Android 的 StrictMode - 如何正确使用它,为什么没有它我的应用程序无法运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21906222/

相关文章:

java - Swing 制作游戏的提示

java - 在远程 View 中使用粗体文本

java - 在 onCreate() 中定义 UI 变量并覆盖方法

android - 在 Facebook 集成上发布多张图片

python - Python 端口扫描器中的线程

java - 无效的内存访问

java - 在 JSF 中以编程方式发送多个消息

android - 如何使用具有依赖项的 Gradle (Android Studio) 创建 .jar

WPF 相当于 Windows 窗体中的 'Control.CheckForIllegalCrossThreadCalls'

c# - 新内锁