为了解决新线程不能更新UI组建的问题,Andorid提供了如下几种解决方案:
二、ANR(Application Not Responding)异常
Android默认约定当UI线程阻塞超过20秒将会引发ANR(Application Not Responding)异常。但实际上,不要说20秒,即使是5秒甚至2秒,用户都会感到十分不爽。因此,没必要去记这个20秒的时间限度。总之,开发者必须牢记:不要在UI线程中执行一些耗时操作。
AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,继承AsyncTask需要指定如下三个泛型参数:
-
Params:启动任务执行的输入参数的类型。
-
Progress:后台任务完成进度值的类型。
-
Result:后台执行任务完成后返回结果的类型。
五、使用AsyncTask的步骤
1.创建AsyncTask的子类,并为三个泛型参数指定类型。如果某个泛型参数不需要指定类型,可将它指定为void。
2.根据需要,实现AsyncTask的如下方法:
doInBackground(Params …):后台线程将要完成的任务,可以调用publishProgress(Progress... values)方法更新任务执行进度。
onProgressUpdate(Progress... values):在doInBackground()方法中调用publishProgress()方法更新任务的执行进度后,就会触发该方法。
onPreExecute():执行后台耗时操作前被调用,通常用户完成一些初始化操作,比如在界面上显示进度条。
onPostExecute(Result result):当doInBackground()完成后,系统会自动调用onPostExecute()方法,并将doInBackground方法返回的值传给该方法。
3.调用AsyncTask子类的实例的execute(Params... params)开始执行耗时任务。
六、使用AsyncTask时必须遵守的规则
-
必须在UI线程中创建AsyncTask的实例。
-
必须在UI线程中调用AsyncTask的execute()方法。
-
AsyncTask的onPreExecute()、onPostExecute(Result result)、doInBackground(Params... params)、onProgressUpdate(Progress... values)方法,不应该由程序员代码调用,而是由Android系统负责调用。
-
每个AsyncTask只能被执行一次,多次调用将会引发异常。
分享到:
相关推荐
Android学习笔记(三二):线程:后台异步任务AsyncTask_IT168文库
Android学习笔记(三二):线程:后台异步任务AsyncTask
Android利用异步任务AsyncTask 发送post请求并获取son字符串
android较轻级异步任务的一点理解。
Android异步处理二:使用AsyncTask异步更新UI界面。
Android异步任务AsyncTask的简单DEMO
Android最全最简单的异步任务AsyncTask使用解析.一步到位彻底理解异步任务。
Android异步任务下载一张图片,关键是异步任务的流程,带进度条的异步任务
Android是单线程模型,耗时的操作必须放在非主线程中执行,对此,我们需要使用多线程/线程池或者AsyncTask等来完成异步加载任务。 博客地址:http://blog.csdn.net/chenzheng8975/article/details/53893666
Android AsyncTask用法和异步加载图片通过AsyncTask 从网络上异步加载一张图片
android:AsyncTask实现异步处理任务.pdf
主要介绍了Android中异步类AsyncTask用法,分析总结了Async Task类的功能、特点及相关的使用技巧与注意事项,需要的朋友可以参考下
异步任务Asynctask源码与反编译对比,来分析源代码
Android AsyncTask异步处理下载网页
因为,UI线程主要是用来更新界面UI,如果一次进行太多的任务处理,并且这些任务需要相当的时间来完成,就会造成UI线程堵塞,结果可能是应用无响应(Android4.0以后,谷歌已经禁止在UI线程中进行“耗时操作”),这样的...
Android为了降低这个开发难度 提供了AsyncTask AsyncTask就是一个封装过的后台任务类 顾名思义就是异步任务 AsyncTask直接继承于Object类 位置为android os AsyncTask 要使用AsyncTask工作我们要提供三个泛型参数 ...
基于Android的AsyncTask异步任务, Android的AsyncTask将复杂的数据处理交由子线程, 将处理过程交由主线程处理
Android 使用AsyncTask异步更新UI界面