如何用AsyncTask实现异步任务处理?

2026-05-23 22:421阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计552个文字,预计阅读时间需要3分钟。

如何用AsyncTask实现异步任务处理?

优势:十简化地从子线程切换到主线线程,需创建一个子类去继承它。在集成时,我们可以为AsyncTask类指定3个泛型参数,这三个参数的用途如下:Params:在执行AsyncTask时需要传入的参数,可用于在onPreExecute()中进行操作。Result:执行AsyncTask任务后返回的结果类型,可用于在onPostExecute(Result result)中进行操作。Drawable:可用于在“publishProgress(…)方法中传递,在进度更新回调中接收。

优点:十分简单地从子线程切换到主线程,要创建一个子类去继承它.在集成时我们可以为AsyncTask类指定3个泛型参数,这三个参数的用途如下. Params 在执行AsyncTask时需要传入的参数,可用于在后台任务中使用 Progress 后台任务执行时,如果需要在界面上显示当前的进度,则使用这里的泛型做进度单位 Result 当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型. 一个最简单的自定义AsyncTask就可以写下如下方式

class DownloadTask extends AsyncTask<Void,Integer,Boolean>{}

第一个泛型指定为void,表示在执行AsyncTask的时候不需要传入参数给后台任务,第二个泛型参数指定为Integer,表示使用整型数据来作为进度显示单位.第三个泛型单位指定为Boolean,则表示使用布尔型数据来执行结果

如何用AsyncTask实现异步任务处理?

自定义AsyncTask 代码如下

public class DownloadTask extends AsyncTask<Void,Integer,Boolean> { ProgressDialog progressDialog; Context context; protected void onPreExecute(){ progressDialog.show();//显示进度对话框 } @Override protected Boolean doInBackground(Void... params) { try { while (true){ int downloadPercent = doDownload(); //这是一个虚构的方法 publishProgress(downloadPercent); if(downloadPercent >= 100){ break; } } }catch (Exception e){ return false; } return true; } private int doDownload() { return 0; } protected void onProgressUpdate(Integer... values){ //在这里更新下载速度 progressDialog.setMessage("Downloaded" + values[0] +"%"); } protected void onPostExecute(Boolean result){ progressDialog.dismiss(); //关闭进度对话框 //在这里提示下载结果 if(result){ Toast.makeText(content,"Download succeed",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(content,"Download failed",Toast.LENGTH_SHORT).show(); } }}

AsyncTask的诀窍就是 在doInbackground()中执行具体的耗时任务,在onProgressUpdate()方法中进行UI操作,在onPreExecute()方法中执行一些任务的收尾工作。 如果想要启动这个任务,只需要编写以下代码

new DownloadTask().execute();

本文共计552个文字,预计阅读时间需要3分钟。

如何用AsyncTask实现异步任务处理?

优势:十简化地从子线程切换到主线线程,需创建一个子类去继承它。在集成时,我们可以为AsyncTask类指定3个泛型参数,这三个参数的用途如下:Params:在执行AsyncTask时需要传入的参数,可用于在onPreExecute()中进行操作。Result:执行AsyncTask任务后返回的结果类型,可用于在onPostExecute(Result result)中进行操作。Drawable:可用于在“publishProgress(…)方法中传递,在进度更新回调中接收。

优点:十分简单地从子线程切换到主线程,要创建一个子类去继承它.在集成时我们可以为AsyncTask类指定3个泛型参数,这三个参数的用途如下. Params 在执行AsyncTask时需要传入的参数,可用于在后台任务中使用 Progress 后台任务执行时,如果需要在界面上显示当前的进度,则使用这里的泛型做进度单位 Result 当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型. 一个最简单的自定义AsyncTask就可以写下如下方式

class DownloadTask extends AsyncTask<Void,Integer,Boolean>{}

第一个泛型指定为void,表示在执行AsyncTask的时候不需要传入参数给后台任务,第二个泛型参数指定为Integer,表示使用整型数据来作为进度显示单位.第三个泛型单位指定为Boolean,则表示使用布尔型数据来执行结果

如何用AsyncTask实现异步任务处理?

自定义AsyncTask 代码如下

public class DownloadTask extends AsyncTask<Void,Integer,Boolean> { ProgressDialog progressDialog; Context context; protected void onPreExecute(){ progressDialog.show();//显示进度对话框 } @Override protected Boolean doInBackground(Void... params) { try { while (true){ int downloadPercent = doDownload(); //这是一个虚构的方法 publishProgress(downloadPercent); if(downloadPercent >= 100){ break; } } }catch (Exception e){ return false; } return true; } private int doDownload() { return 0; } protected void onProgressUpdate(Integer... values){ //在这里更新下载速度 progressDialog.setMessage("Downloaded" + values[0] +"%"); } protected void onPostExecute(Boolean result){ progressDialog.dismiss(); //关闭进度对话框 //在这里提示下载结果 if(result){ Toast.makeText(content,"Download succeed",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(content,"Download failed",Toast.LENGTH_SHORT).show(); } }}

AsyncTask的诀窍就是 在doInbackground()中执行具体的耗时任务,在onProgressUpdate()方法中进行UI操作,在onPreExecute()方法中执行一些任务的收尾工作。 如果想要启动这个任务,只需要编写以下代码

new DownloadTask().execute();