0

我在activity的入口处添加了版本检测。并在 onCreate 方法中添加以下代码。

new Thread(){
         public void run(){
         try{
         checkToUpdate();
         }
            catch(Exception e) {
            }
         }
            }.run();

现在它有了一个新线程。但是为什么它有错误:android 4.0中的android.os.NetworkOnMainThreadException?

提前致谢!

4

4 回答 4

2

它应该是start()而不是run()

new Thread(){
         public void run()
         {
            try{
            checkToUpdate();
         }
            catch(Exception e) {
            }
         }
            }.start();

并且可能是您没有在清单文件中添加互联网权限

<manifest xlmns:android...>
 ...
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
于 2012-11-29T09:05:30.517 回答
1

您应该调用该start()方法。

run()在当前线程上调用该方法,而该方法start()创建一个新线程并run()在新创建的线程上调用该方法。

在早期的 Android 版本中,如果您在主 (UI) 线程上运行长时间操作,您不会立即收到异常,只有在 Dalvik 检测到应用程序几秒钟没有响应之后。现在,如果您尝试在主线程上执行网络通信,则会引发异常,以便您在开发时轻松发现这些问题。

于 2012-11-29T09:05:34.227 回答
0

您需要使用AsyncTask,否则Handler with Thread您不能再使用主线程来执行网络进程HONEY COMB

于 2012-11-29T09:05:27.137 回答
0

长时间运行的任务和网络操作不应该放在 onCreate() 方法上,因为会分配一小段时间来完成 onCreate() 方法(可能 4 秒或更短),你将它移到 onResume() 方法,如果可能的话把它放在 AsyncTask 中。

于 2012-11-29T09:12:25.213 回答