Java 安卓&x27;s StrictMode-我如何正确使用它,为什么没有它我的应用程序不能工作?
我已经开始尝试一些简单的概念,比如绑定ListView和将JSON数据提取到填充ListView的适配器。该示例附带以下代码:Java 安卓&x27;s StrictMode-我如何正确使用它,为什么没有它我的应用程序不能工作?,java,android,multithreading,Java,Android,Multithreading,我已经开始尝试一些简单的概念,比如绑定ListView和将JSON数据提取到填充ListView的适配器。该示例附带以下代码: StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .build(); StrictMode.setThreadPolicy
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一开始就允许你这么做呢
同样,有人能解释一下上面的StrictMode片段吗?我已经阅读了Android开发文档,但是对于它如何允许代码运行,我仍然有点困惑
我唯一的理论是下面的伪解释:
对于当前线程,检测所有非法操作。记录问题,但忽略它。设置当前线程的策略以使用此规则
我关闭了吗?在api 9中,您不能直接调用主线程上的网络操作,而是可以使用AsyncTask来实现。更多信息,请查看此教程。+1,尽管如果您提供一些示例代码,这将是一个更好的答案。+1教程看起来非常不错,今晚将进行阅读,谢谢。@Rudi网上有很多例子,教程中也有一个例子link@drminnaar是的,请仔细阅读,它会给你很多关于网络异步运行的细节。这不是重点,这是一个非常接近于链接的答案-