框架来管理线程以及任务的执行的,concurrent框架是一个非常成熟,高效的框架,
经过了严格的测试。这说明
AsyncTask的设计很好的解决了
匿 名 线 程 存 在 的 问 题 。 AsyncTask 是 抽 象 类 , 子 类 必 须 实 现 抽 象 方 法
doInBackground(Params... p)
,在此方法中实现任务的执行工作,比如连接网络获取数据等。通常还应该实现
onPostExecute(Result r)方法,因为应用程序关心的结果在此方法中返回。需要注意的是
AsyncTask一定要在主线程中创建实例。AsyncTask定义了三种泛型类型
Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL。 Progress 后台任务执行
的百分比。
Result
后台执行任务最终返回的结果,比如
String 在一个异步任务里,不是所有的类型总
被用。假如一个类型不被使用,可以简单地使用
Void类型
Android 应用是单线程模式的。
单线程模式需要记住两条:
一、防止
UI 线程阻塞
二、确保只在
UI 线程中访问 Android UI 工具包
在开发
Android 应用时必须遵守单线程模型的原则:Android UI 操作并不是线程安全的
并且这些操作必须在
UI 线程中执行。
在此介绍下何谓
UI 线程:当一个程序第一次启动时,Android 会同时启动一个对应的主线
程
(Main Thread),主线程主要负责处理与 UI 相关的事件,如:用户的按键事件,用户接
触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程
通常又被叫做
UI 线程。
什么情况下会出现线程阻塞?如在登录时,一般会去访问网络,这个需要一段时间,如果
写带
UI 线程中,则会出现界面假死现象,也就是界面卡住不支持用户交互,这一点在要求
高交互的手机上肯定是不能容许的。
ok,这个时候你可能会去考虑新开一个线程或者在后
台线程中来执行耗时的操作,如下面的例子:
public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
Bitmap b = loadImageFromNetwork(); //从网络上下载图片