我已经开始研究一些简单的概念,例如绑定(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/