使用AsyncTask运行异步任务

  Android为在后台进行处理提供了两种可选方法。(1)AsyncTask类允许定义将在后台执行的操作,并提供了可以用来监控进度以及在GUI线程上发布结果的事件处理程序。

(2)也可以实现自己的线程,使用Handler类来与GUI线程同步,然后更新UI。

  我们今天主要讲述AsyncTask的用法:

1、AsyncTask类提供了一种简单便捷的机制,可以将费时的操作移入后台线程。将事件处理与GUI线程进行同步,允许通过更新视图和其他UI元素来报告进度,或者在任务完成时发布结果。AsyncTask处理线程创建、管理和同步等全部工作,它可以用来创建一个异步任务,该任务由两部分组成:将在后台执行的处理,以及在处理完成后执行的UI更新。

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

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

  Progress 后台任务执行的百分比。(报告进度的值)

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

如果不需要或者不想使用输入参数、更新进度或报告最终结果,则只需为其中一种或者全部类型指定void即可。

3、AsyncTask的执行分为四个步骤,每一步对应一个回调方法。

  a、子类化AsyncTask

  b、实现AsyncTask中定义的下面一个或多个方法:

    onPreExecute(),该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,例如在界面上显示一个进度条。

    doInBackground(Params...),将在onPreExecute方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。

    onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。

    onPostExecute(Result),在doInBackground执行完成后,onPostExecute

方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread。

4、为了正确的使用AsyncTask类,以下几条必须遵守的准则:

  a、Task的实例必须在UI thread中创建

  b、execute方法必须在UI thread中调用

  c、不要手动调用onPreExecute(),onPostExecute(Result),doInBackground(Params...),onProgressUpdate(Progress...)这几个方法

  d、该task只能被执行一次,否则多次调用时将会出现异常

5、Java代码实现:

  private class MyAsyncTask extends AsyncTask<String,Integer,Integer>{

   @Overrid

   protected void onPreExecute() {

     //更新进度通知或其他UI元素
       }

   @Override

   protected void onProgressUpdate(Integer...progress){

    //更新进度条通知或其他UI元素

    }

  @Overrid

  protected void onPostExecute(Integer...result){

    //通知UI更新、对话框或通知报告结果

  }

  @Overrid

  protected Integer doInBackground(String...parameter){

  //返回(将传递给onPostExecute的值)结果

   }

 

 

posted @ 2011-12-01 16:16  淽沐  阅读(542)  评论(0编辑  收藏  举报