温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中如何使用AnsyncTask实现异步任务

发布时间:2022-04-08 16:06:14 来源:亿速云 阅读:103 作者:iii 栏目:编程语言

本篇内容介绍了“Android中如何使用AnsyncTask实现异步任务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

同步和异步的概念区别:

同步,必须执行完成某个问题后才能继续执行其他的。

异步,我会去先执行其他问题,你执行完之后返回给我一个结果就可以。

android中为什么要引用异步任务呢

android启动的,会启动一个线程也称为主线程,UI线程,但是我们不能把所有耗时的任务交给主线程来完成,这样会影响用户的体验,也就是说我们要另外的开辟新的线程来执行我们的任务,

但是在android中,(加载图片,网络编程都属于耗时的操作),在android4.0后规定禁止在主线程中完成网络操作,所以说这些耗时的任务要交给子线程,

问题,子线程中是不能进行ui操作的,只有作为主线程的ui线程才能够进行ui操作,那么我们怎么讲信息返回给用户呢。

方式1.我们可以通过handler,在handler中写好了跟新的操作,在子线程中调用sendmessage通知我们的handler跟新ui

方式2.利用Activity.runonUIThread(Runnable)进行子线程到ui线程的切换。

为什么要是用AsyncTask?

很简单,人都是很懒的,使用上述的两种方式操作麻烦,所以大佬们就封装了一个异步执行的方法,便于我们直接处理耗时逻辑,更新UI.

我们一般用它完成网络操作,图片加载,数据传输等操作。(当然后续我们会选择我们的第三方的框架来完成)

Asynctask的基本使用:

首先它是一个抽象类,也就是说我们要重写他的方法然后在new

AsyncTask<Params,progress,result>

parames:启动任务的时候执行的参数,比如传入的url

Progress:后台执行进度的百分比单位

result:执行完异步操作后返回的结果

(与handler相比,他的后台是一个线程池,再数据庞大的时候回体现出优势)

AsyncTask的几个重要的方法

 @Override
 protected void onPreExecute() {
  super.onPreExecute();
 }
//执行耗时操作之前调用的一个方法,相当于我们的初始化的方法

注意该该方法是运行在ui线程中的

@Override
 protected String doInBackground(String... params) {
  return null;
 }

该方负责执行我们耗时的业务逻辑操作,也就是说他是在子线程中运行的,如果想要更新ui怎么办

调用的我们的publicProgress方法可以更新我们的ui, 此方法是在子线程中运行的

publishProgress(Object o);

此方法表示更新我们的进度,可用于更新下载的进度条等。

 @Override
 protected void onProgressUpdate(Integer... values) {
  super.onProgressUpdate(values);
 }

此方法是在主线程中执行的方法,一旦我们在耗时逻辑代码中调用了publicProgress就表示我们希望更新进度条。

此时就会调用这个方法到ui线程跟新我们的进度条。

注意:task实例必须在ui线程中创建   task.excute(初始参数比如url);

我们无需手动的调用task中的方法

task只能被执行一次

“Android中如何使用AnsyncTask实现异步任务”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI