新线程和AsyncTask之间的区别

tyc*_*czj 2 multithreading android

new Thread(new Runnable(){

}).run();
Run Code Online (Sandbox Code Playgroud)

VS

new AsyncTask().execute();
Run Code Online (Sandbox Code Playgroud)

我的印象是他们是同一个东西,都开始了新的工作线程,但事实并非如此吗?

我问的原因是因为如果我尝试使用任何类型的网络连接new Thread()我得到一个NetworkOnMainThreadException但是当我在异步任务中放入相同的代码时,我没有得到它.

这个差异的另一个例子是使用google maps api v2,其中所有的情节/显示/隐藏必须在上面进行,main thread但是如果我new Thread()用来隐藏/显示标记,那么看起来很好但是如果我尝试在异步任务中显示/隐藏我得到一个例外,说它需要在主线程上完成.

new Thread()真的不启动辅助线程?

编辑

不知道为什么这个被关闭,因为提供的链接我已阅读并没有回答我的问题,并没有提到使用run()vs start()回答我的问题

Nic*_*ckT 6

如果调用run()而不是start(),它将在调用它的线程上运行.如果调用start(),则会创建一个新线程.这就是你得到错误的原因,因为你调用.run()