tag 标签: AsyncTask

相关博文
  • 热度 3
    2021-11-12 16:33
    2322 次阅读|
    0 个评论
    Android之AsyncTask使用实例
    AsyncTask 是 Android 提供的轻量级的异步类,可以直接继承 AsyncTask ,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现 UI 进度更新),最后反馈执行的结果给 UI 主线程。这个类的设计目的很明确,就是为了 " 执行一个较为耗时的异步任务(最多几秒钟),然后更新界面 " 。 这种需求本可以使用 Handler 和 Thread 来实现,但是在单个后台异步处理时显得代码过多、结构过于复杂,因此 Android 提供了 AsyncTask 类。但是在使用多个后台异步操作并需要进行 U I 变更时,使用 AsyncTask 类就变得复杂起来,使用 Handler 和 Thread 则更加合适。 另外,这里所说的轻量级只是代码上的轻量级,而非性能上的,使用 AsyncTask 会更加消耗性能 ∶ AymcTask 类有 4 个重要方法,这也是当一个异步任务被执行时要经历的 4 步,如表 1-1 所 示 。 表 1-1 AsyncTask 类的 4 个重要方法 方法 作用 onPreExecute() 在异步任务开始执行前在 U I 线程中执行,一般用来设置任务参数 dolnBackground() 最重要的方法,在子线程中执行(事实上,只有它在子线程中执行,其他方法都在 UI 线程中执行)。当 onPreExecute () 结束后,本方法立刻执行,用来进行后台的耗时计算 , 异步任务的参数会被传给它,执行完成的结果会被送给第四步。执行途中,它还可以调用 publishProgress () 方法来通知 U I 线程当前执行的进度 onProgressUpdate() 当 publishProgress () 被调用后,它在 UI 线程中执行,刷新任务进度,一般用来刷新进度条等 UI 部件 onPostExecute() 当后台的异步任务完成后,它会在 U I 线程中被调用,并获取异步任务执行完成的结 果 下面用一个实例来讲解如何使用 AsyncTask 类。创建一个继承自 AsyncTask 类的 MyAsyncTask 类,实现它的 4 个主要方法,并创建一个带参数的构造方法,用以介绍 Activi ty 类的 Content 和布局管理器。在 dolnBackground () 方法中模拟下载任务,并每隔 1 秒更新一次进度条。代码如下 ∶ package com.rfstar.asynctasktest; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; public class MyAsyncTask extends AsyncTask { private ProgressDialog progressDialog; private ViewGroup viewGroup; private Context context; public MyAsyncTask(Context context,ViewGroup viewGroup) { this.viewGroup=viewGroup; this.context=context; } @Override protected void onPreExecute() { super.onPreExecute(); //使用一个进度条对话框; progressDialog=new ProgressDialog(context); progressDialog.setTitle("正在下载中,请稍后......"); //设置ProgressDialog样式为圆圈的形式 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.show(); } @Override protected String doInBackground(Object ; int flag=0; while (flag<100){ flag+=20; //跟新进度,将回调onProgressUpdate()方法 publishProgress(flag); try{ Thread.sleep(1000); }catch (Exception e){ } } return address+"从这个下载地址下载了一本小说,欢迎阅读。"; } @Override protected void onProgressUpdate(Object ); } @Override protected void onPostExecute(Object o){ super.onPostExecute(o); //在布局中加入一个TextView TextView textView=new TextView(context); textView.setText((String)o); viewGroup.addView(textView); //关闭进度条 progressDialog.dismiss(); } } 同时建立一个 Activity ,在布局文件中加入一个 Button, 当点击 Button 时,实例化 MyAsyncTask 类并调用 excute() 方法。布局文件代码如下: