美文网首页
Android_AsyncTask个人笔记

Android_AsyncTask个人笔记

作者: ZAdonai | 来源:发表于2018-07-25 22:49 被阅读0次

title: Android_AsyncTask

目的

​ 异步任务允许你在用户的接口上执行异步工作。将线程阻塞性任务放在工作线程,然后将结果推回UI主线程。用异步任务的好处是用户不需要再去开启线程,去做一些线程里面方法的顺序操作。而 AsyncTask 其实就是一个线程框架,它已经为我们封装好了

​ 在Android3.0以上的版本中,为了使得Android UI能够更加流畅,不允许用户在UI的主线程中访问网络,所以会强制用户开辟一个子线程,在这个线程中完成下载耗时的操作(比如从网络中下载一张图片),此时UI的主线程与下载的子线程是存在一个异步的过程,一旦子线程中下载图片完成,就要把结果推送到UI上。


基本语法

AsyncTask类由三个泛型参数和4个回调方法实现的

三个泛型参数

  1. Params: 启动任务执行的输入参数,比如HTTP请求的URL
  2. Progress: 后台任务执行的百分比会发布到UI主线程中
  3. Result: 后台执行任务最终返回的结果,比如String,Integer等

如果三个泛型都没有类型,我们就用Void代替

private class MyTask extends AsyncTask<Void, Void, Void>{}

四个回调方法

  1. onPreExecute(): 在任务执行之前在UI主线程中被调用的。这个通常是用来做任务的准备,比如获得一个显示进度条的实例等
  2. doInBackground(Params...): onPreExecute()执行完成后马上被后台的进程中调用,用来处理耗时的操作,异步任务的输入参数也会传递到这里。计算得到结果会通过后面的执行方法(onPostExecute())推送到UI主线程中。这个步骤还可以使用使用 publishProgress(Progress...) 来显示进度刻度。这些刻度会在UI主线程中实时显示通过onProgressUpdate(Progress...)方法
  3. onProgressUpdate(Progress...): publishProgress(Progress...)方法执行之后会被UI主线程调用,用来在UI主线程中实时显示计算刻度。
  4. onPostExecute(Result): 在后台计算完成之后被UI主线程调用。doInBackground()方法返回的结果会作为它的一个参数来推送到UI主线程中

中途取消执行

​ 异步任务可以在任意时间调用cancel(boolean)来取消,调用这个方法之后会造成后续的isCancelled()方法都是返回true,取消之后在执行完doInBackground(Object[])后onCancelled(Object)方法会代替onPostExecute(Object)方法被执行。

了能尽快取消一个任务,我们应该在doInBackground(Object[])里周期性的检查isCancelled()的返回值(例如在一个循环里)


注意事项

  1. AsyncTask类必须在UI主线程中被加载
  2. 任务类的实例(即new出一个继承AsyncTask类,作为匿名内部类的实例)必须在UI主线程中创建
  3. execute(Params...) 必须在UI主线程中被调用
  4. 不要手动的去调用 onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)这些方法
  5. 任务只能被执行一次

有空再写Demo吧,现在只了解个大概

相关文章

网友评论

      本文标题:Android_AsyncTask个人笔记

      本文链接:https://www.haomeiwen.com/subject/kvammftx.html