WEB开发网
开发学院手机开发Android 开发 Android线程交互(Handler+Thread 和 AsyncTask)... 阅读

Android线程交互(Handler+Thread 和 AsyncTask)

 2010-09-10 00:49:00 来源:WEB开发网   
核心提示:,在此方法中实现任务的执行工作,Android线程交互(Handler+Thread 和 AsyncTask)(6),比如连接网络获取数据等,通常还应该实现onPostExecute(Result r)方法,PageTask扩展了AsyncTask,在doInBackground()方法中读取网页内容,因为应用程序关心
,在此方法中实现任务的执行工作,比如连接网络获取数据等。通常还应该实现onPostExecute(Result r)方法,因为应用程序关心的结果在此方法中返回。需要注意的是AsyncTask一定要在主线程中创建实例。AsyncTask定义了三种泛型类型 Params,Progress和Result。

Params 启动任务执行的输入参数,比如HTTP请求的URL。

Progress 后台任务执行的百分比。

Result 后台执行任务最终返回的结果,比如String。

AsyncTask的执行分为四个步骤,与前面定义的TaskListener类似。每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。在任务的执行过程中,这些方法被自动调用。

onPreExecute() 当任务执行之前开始调用此方法,可以在这里显示进度对话框。

doInBackground(Params...) 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress...)来更新任务的进度。

onProgressUpdate(Progress...) 此方法在主线程执行,用于显示任务执行的进度。

onPostExecute(Result) 此方法在主线程执行,任务执行的结果作为此方法的参数返回。

PageTask扩展了AsyncTask,在doInBackground()方法中读取网页内容。PageTask的源代码如下所示:

view plaincopy to clipboardprint?

// 设置三种类型参数分别为String,Integer,String

class PageTask extends AsyncTask {

// 可变长的输入参数,与AsyncTask.exucute()对应

@Override

protected String doInBackground(String... params) {

try {

HttpClient client = new DefaultHttpClient();

// params[0]代表连接的url

HttpGet get = new HttpGet(params[0]);

HttpResponse response = client.execute(get);

HttpEntity entity = response.getEntity();

long length = entity.getContentLength();

InputStream is = entity.getContent();

String s = null;

if (is != null) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Android 线程 交互

编辑录入:coldstar [复制链接] [打 印]
赞助商链接