Android的StrictMode - 我如何正确使用它,为什么我的应用程序没有它没有工作?

时间:2014-02-20 11:21:16

标签: java android multithreading

我开始玩简单的概念,比如绑定ListViews并将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片段吗?我已经阅读了关于它的Android开发文档,但我仍然对它如何允许代码运行感到困惑。

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

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

我关闭了吗?

1 个答案:

答案 0 :(得分:2)

来自api 9的

你不能直接在主线程上调用网络操作,而是可以使用AsyncTask来实现。有关详细信息,请查看此tutorial