有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我已经开始尝试一些简单的概念,比如绑定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

看起来我有了一个“安卓”。操作系统。NetworkOnMainThreadException的异常。现在,我可以理解为什么你不想在你的UI线程上运行任何网络代码,但是如果StrictMode保证会引发运行时异常,为什么StrictMode一开始就允许你这么做呢

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

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

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

我接近了吗


共 (1) 个答案

  1. # 1 楼答案

    从api 9中,您不能直接在主线程上调用网络操作,而是可以使用AsyncTask来实现。有关更多信息,请查看此tutorial