android AsyncTask

2021-06-22/2021-06-22

1. 基本使用

我们需要创建一个类来继承 AsyncTask,AsyncTask 有三个泛型

  • Params,执行 AsyncTask 需要传入的参数,可用于在后台任务中使用。
  • Progress,后台任务执行时,若需在界面显示进度,这个泛型为进度的单位。
  • Result,任务执行完毕后,若需对结果进行返回,此泛型为返回值类型。
 1/**
 2  * 步骤1:创建 AsyncTask 子类
 3  * 注: 
 4  *   a. 继承 AsyncTask 类
 5  *   b. 为3个泛型参数指定类型;若不使用,可用java.lang.Void类型代替
 6  *   c. 根据需求,在 AsyncTask 子类内实现核心方法
 7  */
 8private class MyTask extends AsyncTask<Params, Progress, Result> {
 9    // 方法1:onPreExecute()
10    // 作用:执行 线程任务前的操作
11    // 注:根据需求复写
12    @Override
13    protected void onPreExecute() {
14    }
15
16    // 方法2:doInBackground()
17    // 作用:接收输入参数、执行任务中的耗时操作、返回 线程任务执行的结果
18    // 注:必须复写,从而自定义线程任务,此方法中不能更新 UI
19    @Override
20    protected String doInBackground(String... params) {
21        // 自定义的线程任务
22        // 可调用publishProgress()显示进度, 之后将执行onProgressUpdate()
23            publishProgress(count);
24    }
25
26    // 方法3:onProgressUpdate()
27    // 作用:在主线程,显示线程任务执行的进度,更新 UI
28    // 注:根据需求复写
29    @Override
30    protected void onProgressUpdate(Integer... progresses) {
31    }
32
33    // 方法4:onPostExecute()
34    // 作用:接收线程任务执行结果、将执行结果显示到 UI 组件
35    // 注:必须复写,从而自定义 UI 操作
36    @Override
37    protected void onPostExecute(String result) {
38        // UI操作
39    }
40
41    // 方法5:onCancelled()
42    // 作用:将异步任务设置为:取消状态
43    @Override
44    protected void onCancelled() {
45    }
46}
47
48/**
49* 步骤2:创建AsyncTask子类的实例对象(即 任务实例)
50* 注:AsyncTask子类的实例必须在UI线程中创建
51*/
52MyTask mTask = new MyTask();
53
54/**
55* 步骤3:手动调用execute(Params... params) 从而执行异步线程任务
56* 注:
57*    a. 必须在UI线程中调用
58*    b. 同一个AsyncTask实例对象只能执行1次,若执行第2次将会抛出异常
59*    c. 执行任务中,系统会自动调用AsyncTask的一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute() 
60*    d. 不能手动调用上述方法
61*/
62mTask.execute()
  • AsyncTask 的类必须在主线程加载
  • AsyncTask 对象必须在主线程创建
  • execute() 方法必须在主线程调用
  • 不要再程序中直接调用 onPreExecute()、onPostExecute()、doInBackground()、onProgressUpdate()
    一个 AsyncTask 对象只能调用一次 execute()
  • 3.0 开始串行执行,但可以使用 executeOnExecutor() 变为并行。


标题:android AsyncTask
作者:Rainsheep
地址:HTTPS://www.rainsheep.cn/articles/2021/06/22/1624332078360.html

评论
发表评论
       
       
取消