AsyncTask

匿名 (未验证) 提交于 2019-12-03 00:25:02
  • AsyncTask是什么
  • AsyncTask怎么用
  • 需要实现的几个方法分别是什么
  • 什么是泛型参数
  • 什么是长度可变参数列表
  • 案例解析――倒计时Demo

什么是AsyncTask
1.AsyncTask是Android提供的轻量级(实现代码量少)的异步类
2.为了降低异步通信的开发难度,提供了AsyncTask。
3.AsyncTask直接继承Object类,位于android.os包中。
4.使用AsyncTask可以忽略Looper、MessageQueue、Handler等复杂对象,更便捷的完成异步耗时的操作。
AsyncTask怎么用
1.新建内部类继承AsyncTask;
2.定义AsyncTask的三种泛型参数;
3.重写DoInBackground抽象方法;
4.重写onPreExecute方法;
5.重写onProgressUpdate方法;
6.重写onPostExecute方法;
7.需要调用的地方启用execute方法
AsyncTask的泛型参数和常用方法
AsyncTask三种泛型参数
Params:启动任务执行的输入参数
Progress:后台任务执行的百分比
Result:后台执行任务最终返回的结果

onPreExecute方法
1.异步任务开始执行时,系统最先调用此方法。
2.此方法运行在主线程中,可以对控件进行初始化等操作。

doInBackground方法
1.执行完onPreExecute方法后,系统执行此方法。
2.此方法运行在子线程中,比较耗时的操作放在此方法中执行。

onProgressUpdate方法
1.显示当前进度,适用于下载或扫描这类需要实时显示进度的需求。
2.此方法运行在主线程中,可以修改控件状态,例如:显示百分比。
3.触发此方法,需要在doInBackground中使用publishProgress方法。

onPostExecute方法
1.在异步任务执行完成后,系统会调用此方法。
2.此方法运行在主线程中,可以修改控件状态,例如:下载完成。

什么是长度可变参数列表

private void removeTempFiles(String... fileNames) {   for (String fileName : fileNames) {   try {   new File(fileName).delete();   } catch (Exception e) {   }   }   }  

String后面的三个点就是代表可变参数,调用的时候可以随便写参数个数,适合不指定性参数

倒计时代码

ackage com.example.myapplication;  import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;  public class DownloadTaskActivity extends AppCompatActivity {     private TextView task_tv;     private Button task_btn;     private int count=10;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_download_task);          task_tv = findViewById(R.id.task_tv);         task_btn = findViewById(R.id.task_btn);         task_btn.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 new DownloadTask().execute();              }         });      }      class DownloadTask extends AsyncTask<String, String, String> {          //启动前         @Override         protected void onPreExecute() {             super.onPreExecute();             task_tv.setText("正在下载");         }          //这个方法一定要重写         @Override         protected String doInBackground(String... strings) {             while (count>0){                 publishProgress(count+"");                 count--;                 try {                     Thread.sleep(1000);                 } catch (InterruptedException e) {                     e.printStackTrace();                 }             }             return "下载完成";         }          @Override         protected void onProgressUpdate(String... values) {             super.onProgressUpdate(values);             task_tv.setText(values[0]);         }          @Override         protected void onPostExecute(String s) {             super.onPostExecute(s);             task_tv.setText(s);         }      } 
文章来源: AsyncTask
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!