background image

 框架来管理线程以及任务的执行的,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();   //从网络上下载图片