我在活动的入口处添加版本检测。并在onCreate方法中添加以下代码。
new Thread(){
public void run(){
try{
checkToUpdate();
}
catch(Exception e) {
}
}
}.run();
现在它有一个新线程。但为什么它有错误:android 4.0中的android.os.NetworkOnMainThreadException?
提前感谢!
答案 0 :(得分: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>
答案 1 :(得分:1)
您应该调用start()
方法。
在当前线程上调用run()
方法,而start()
方法创建新线程并在新创建的线程上调用run()
方法。
在早期的Android版本中,如果您在主(UI)线程上运行了一个长操作,那么只有在Dalvik检测到应用程序几秒钟没有响应之后,您才立即得到异常。现在,如果您尝试在主线程上执行网络通信,则会抛出异常,以便您在开发时轻松找到这些问题。
答案 2 :(得分:0)
您需要使用AsyncTask
或Handler with Thread
,HONEY COMB
答案 3 :(得分:0)
长时间运行的任务和网络操作不应该放在onCreate()方法上,因为分配一小段时间来完成onCreate()方法(可能是4秒或更短),你将它移动到onResume()方法,如果可能的话,把它放在AsyncTask中。