AsyncTask 与 Thread 区别,用哪个

Thread+Handler机制,Thread通过handler向主线程发送消息、传递数据,来更新UI,但是大量的子线程会分享主线程的系统资源,从而会使主线程因资源受限而导致应用性能降低,更好的方法是使用AsyncTask。

Thread是Java早期为实现多线程而设计的,比较简单不支持concurrent中很多特性在同步和线程池类中需要自己去实现很多的东西,对于分布式应用来说更需要自己写调度代码,而为了Android UI的刷新google引入了Handler和Looper机制,它们均基于消息实现,有可能消息队列阻塞或其他原因无法准确的使用。

Google在Browser中大量使用了异步任务作为处理耗时的I/O操作,比如下载文件、读写数据库等等,它们在本质上都离不开消息,但是 AsyncTask相比Thread加Handler更为可靠,更易于维护,但AsyncTask缺点也是有的比如一旦线程开启即 dobackground方法执行后无法给线程发送消息,仅能通过预先设置好的标记来控制逻辑,当然可以通过线程的挂起等待标志位的改变来通讯,对于某些应用Thread和Handler以及Looper可能更灵活。

Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。相对来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和Handler即可实现。

AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。

  •   Params 启动任务执行的输入参数,比如HTTP请求的URL。
  •   Progress 后台任务执行的百分比。
  •   Result 后台执行任务最终返回的结果,比如String。

doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数

AsyncTask 怎么返回值给UI线程?

把AsyncTask单独写成类,不是其他Activity的子类。UI线程 通过AsyncTask和服务器交互,需要根据结果 打开不同的新的activity,可以onPostExecute ()中返回值给主线程吗?可以传参数给AsyncTask,然后在onPostExecute 使用其他activity的 finish()吗?

onPostExecute 已经是 UI 线程了,直接 startActivity 就可以。后一个问题,建议你不要这样做,太复杂的生命期管理逻辑会出问题的。

AsyncTask不返回结果

AsyncTask<[Input Parameter Type], [Progress Report Type], [Result Type]>

如果你不需要输入参数、更新进度或者返回值,只需简单的指定相应的类型为void。

Not all types are always used by an asynchronous task. To mark a type as unused, simply use the type Void:

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: