Android异步操作 AsyncTask
首先为什么要进行异步操作呢?主要是因为会有线程的阻塞,阻塞会带来不好的用户体验。那什么叫做异步操作呢?就是两块任务同时执行,相互之间并不干扰。
在Android中除了使用Thread+Handler可以实现多线程之外,还可以使用一个专门封装的类AsynTask来实现。
这里干脆再说说为什么要使用异步操作吧。
假如你在手机上运行一个程序,看到一张图片想下载下来,要大概5-10秒的时间,刚下载着,突然又想点击另外一个东西,这时候你点击就没有相响应了,因为线程被占用着,要等到下载结束你的点击才生效。这个叫做线程的阻塞。这种情况当然不是用户想要的,理想的情况应该是边下图片边干其它的,互不干扰。
怎么实现这种情况呢?多线程。
Android提供了一个叫做AsynTask的类,可以新建一个类来继承这个类,就像如下代码:
public class AsynSleepextends AsyncTask
然后复写doInBackground方法,里面想干啥就干啥。
@Override
protected Void doInBackground(Void... params) {
Sleep sleepFiveSeconds = new Sleep();
sleepFiveSeconds.sleepFive();
return null;
}
}
在其它的Activity的线程中,定义一个AsynSleep类的对象,然后不是调用doInBackground方法,而是调用excute()方法,直接这样就行。
其实这样就是相当于java里面的多线程,只不过android对多线程有了自己的一些封装,这样用起来更加方便,主要还是对于ui的操作,解决ui线程阻塞的问题。
AsyncTask
【Android异步操作 AsyncTask】就是说,这样一个类中,通常需要复写的有5个方法,当在ui线程中定义该类的对象并执行execute方法以后,第一个执行的是onPreExcute()方法,通常可以在里面设定一个比如文本值,开始怎么怎么样了,然后就会执行doInBackground()方法,这个方法是最主要的执行方法,它的参数是类的第一个参数,里面执行耗时较长的一些操作,比如更新进度,但是它自己是不能执行更新ui的。然后使用publishProgress(inti)方法,只要这个方法一被调用,就会触发onProgressUpdate()方法,而这个方法是在ui线程里面执行的,这样的话在onProgressUpdate()就能根据这个progress更新进度条,在doInBackground执行完毕以后,返回一个值,这个值就会传给onPostExcute()方法,这个方法也运行在ui线程中,可对ui进行操作。
推荐阅读
- android第三方框架(五)ButterKnife
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- MongoDB,Wondows下免安装版|MongoDB,Wondows下免安装版 (简化版操作)
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- 在线版的迅捷思维导图怎么操作()
- android|android studio中ndk的使用
- 操作系统|[译]从内部了解现代浏览器(1)
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)