16

我的 Android 3.0 应用程序遇到了NetworkOnMainThreadException。寻找解决方案时我发现了这个,但如果我理解正确,默认设置是关闭严格模式。

此外,我所有的网络访问都在一个 中AsyncTask,所以无论如何我都看不到这个异常的意义。

所以,我现在很绝望我应该做些什么来防止这种情况......

亲切的问候,水母

编辑:

这个博客条目说 AsyncTask 应该足够了,但至少澄清了 StrictMode 点。

解决方案:

我关闭了 StrictMode(保留一些设置可能更好,但我不会被打扰......):

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

之后,我确实遇到了“java.lang.RuntimeException:此线程禁止 HTTP 请求”,但在这里找到了解决方案。不过,我有点困惑,因为AndroidHttpClient当我在我的 Android 2.0+ 应用程序中使用它时效果很好......

解决方案,第 2 部分

事实证明,使用 AsyncTask 是一个好主意,但如果做错了就毫无用处……所以严格模式的反应没有任何问题。应该听的,嗯?;)

仍然很高兴知道它默认在 Honeycomb 上激活。

4

2 回答 2

14

在 Android Honeycomb StrictMode 中启用,将其关闭添加 onCreate() 函数上的代码...

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);       
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
于 2011-11-02T19:50:47.253 回答
5

在 Honeycomb 中默认开启 StrictMode。

具体见说链接penaltyDeathOnNetwork()。我遇到了类似的问题。

于 2011-06-08T13:36:38.900 回答