Android 结合实例学会AsyncTask的使用方法
AsyncTask运行时经过四个步骤,运行四个方法:
1.onPreExecute(),执行在UI线程,能够设置或改动UI控件,如显示一个进度条
2.doInBackground,执行在后台线程,不能够设置或改动UI控件,该方法的执行时机是:
onPreExecute()运行完成马上调用该方法,在方法中进行耗时操作,能够在该方法中调用publishProgress方法
来公布当运行的进度,调用publishProgress方法后就会马上触发onProgressUpdate方法
3.onProgressUpdate,执行在UI线程,能够设置或改动UI控件
4.onPostExecute,执行在UI线程,能够设置或改动UI控件,该方法在doInBackground方法执行完成
后就会调用,该方法的參数就是doInBackground方法返回的结果,能够这样思考:doInBackground方法
既然有一个返回结果,那么这个返回结果究竟返回给谁呢?答案就是:通过參数形式传递给onPostExecute方法
參数说明:
1.doInBackground方法的形參相应的是AsyncTask的第一个參数,即參数类型要同样。doInBackground方法
接收实參的时机是:在UI线程中调用execute方法时为execute方法设置值,调用execute方法,这个值就会通过參数形式传给doInBackground方法,doInBackground方法返回的结果相应的是AsyncTask的第三个參数,即參数类型要同样,
2.onPostExecute方法的參数值就是doInBackground方法返回的结果传递过来的。因此onPostExecute方法的參数
类型与AsyncTask的第三个參数也相应。即同样
3.onProgressUpdate方法的參数类型与AsyncTask的第二个參数相应,即參数类型要同样,在doInBackground方法中能够调用
publishProgress方法将进度值传递给onProgressUpdate方法,进度值的类型由AsyncTask的第二个參数类型决定
參数说明小结:
2.AsyncTask的第二个參数类型决定了publishProgress方法、onProgressUpdate方法的參数类型
3.AsyncTask的第三个參数类型决定了doInBackground方法的返回值类型、onPostExecute方法的參数类型
注:假设不须要參数传递,那么AsyncTask的參数列表能够写成:AsyncTask<Void, Void, Void>
使用AsyncTask类必须遵循的规则:
1.AsyncTask类必须在UI thread载入
2.Task实例必须在UI thread中创建
3.execute方法必须在UI thread中调用
4.不要手动调用onPreExecute、onPostExecute、doInBackground、onProgressUpdate方法
5.该Task仅仅能运行一次,多次调用将会抛出异常
AsyncTask类的使用能够參见AsyncTask源代码凝视部分,当中有具体说明
extends
Activity {
TAG
= "asynctaskdemo";
savedInstanceState) {
LoadAllAppsTask().execute(
"Test AsyncTask");
extends
AsyncTask<String, Integer, Long> {
{
TODO
Auto-generated method stub
{
TODO
Auto-generated method stub
params[0]="+params[0]);
values) {
TODO
Auto-generated method stub
values[0]="+ values[0]);
result) {
TODO
Auto-generated method stub
result="+ result);
06-10 14:17:08.731: DEBUG/asynctaskdemo(7419): doInBackground params[0]=Test AsyncTask
06-10 14:17:08.771: DEBUG/asynctaskdemo(7419): onProgressUpdate values[0]=10
06-10 14:17:08.771: DEBUG/asynctaskdemo(7419): onPostExecute result=100
"Test AsyncTask2","Test AsyncTask3");
{
TODO
Auto-generated method stub
params[1]="+ params[1]);
06-10 14:24:57.843: DEBUG/asynctaskdemo(8269): doInBackground params[1]=Test AsyncTask2
06-10 14:24:57.926: DEBUG/asynctaskdemo(8269): onProgressUpdate values[0]=10
06-10 14:24:57.926: DEBUG/asynctaskdemo(8269): onPostExecute result=100
Android 结合实例学会AsyncTask的使用方法的更多相关文章
- Android 结合实例学会AsyncTask的用法
AsyncTask执行时经过四个步骤,执行四个方法: 1.onPreExecute(),运行在UI线程,可以设置或修改UI控件,如显示一个进度条 2.doInBackground,运行在后台线程,不可 ...
- Android HTTP实例 使用GET方法和POST方法发送请求
Android HTTP实例 使用GET方法和POST方法发送请求 Web程序:使用GET和POST方法发送请求 首先利用MyEclispe+Tomcat写好一个Web程序,实现的功能就是提交用户信息 ...
- Android中异步类AsyncTask的理解
这里有两种解释的方法,各有侧重点: 第一种解释: Async Task 简介:AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦 ...
- Android中糟糕的AsyncTask
上周做一个Android中的帧动画,因为每帧图片都比较大,所以采用每次读取一帧,延时再读取下一帧的方式实现.在读取的时候,采用AsyncTask,去设置ImageView的背景.但是发现需要切换帧动画 ...
- Android必学之AsyncTask
AsyncTask,即异步任务,是Android给我们提供的一个处理异步任务的类.通过此类,可以实现UI线程和后台线程进行通讯,后台线程执行异步任务,并把结果返回给UI线程. .为什么需要使用异步任务 ...
- 【转】 Android常用实例—Alert Dialog的使用
Android常用实例—Alert Dialog的使用 AlertDialog的使用很普遍,在应用中当你想要用户做出“是”或“否”或者其它各式各样的选择时,为了保持在同样的Activity和不改变用户 ...
- Android异步任务处理框架AsyncTask源代码分析
[转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] 引言 在平时项目开发中难免会遇到异步耗时的任务(比方最常见的网络请求).遇到这样的问题.我 ...
- Android - 内存泄漏的情况以及解决方法
[译]Android内存泄漏的八种可能(上) Android防止内存泄漏的八种方法(下). Static Activities 在类中定义了静态Activity变量,把当前运行的Activity实例赋 ...
- Android线程管理之AsyncTask异步任务
前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...
随机推荐
- hdu - 3572 - Task
题意:有N个作业,M台机器,每个作业1天只能同1台机器运行,每台机器1天只能运行1个作业,第i个作业需要pi天完成,且只能从Si到Ei中选Pi天,问能否完成所有作业(T <= 20, N< ...
- 双绞线的制作,T568A线序,T568B线序
双绞线的制作 1.1 实验目的 双绞线是组建局域网时常常使用的通信传输介质,通过本实验,让学生学会制作双绞线. 1.2 实验任务 (1)了解双绞线的特性及屏蔽与非屏蔽双绞线的区别. (2)了解EIA/ ...
- gdb 远程qemu-arm调试
把 c 编译成 arm 指令的可运行文件 /usr/bin/arm-linux-gnueabi-g++ hello.cpp cat hello.cpp #include <stdio.h> ...
- 文本面板——axure线框图部件库介绍
文本部件用于在页面中显示文字,对于文字的格式可以随意的更改,设定不同的字体.尺寸和颜色. 特别注意:文本面板的高度无法直接调整,它的高度是随着字体的大小自动变化的 在6.5版本中,对文本的排版都有2个 ...
- Spring Uploading Files
1,在servlet-dispatcher.xml中添加代码 <bean id="multipartResolver" class="org.springframe ...
- SIMPASS技术解析
一.什么叫SIMPASS SIMpass技术融合了DI卡技术和SIM卡技术,或者称为双界面SIM卡.SIMpass是一种多功能的SIM卡,支持接触与非接触两个工作接口,接触界面实现SIM功能,非接触界 ...
- MySql自己定义排序
查询语句: select id,name,stauts from special where id in (50,51,52,53,54,55) order by FIELD( id ,51,50, ...
- 将n进制的数组压缩成字符串(0-9 a-z)同一时候解压
比如一个3进制的数组: [1 1 2 2 2 0 0] 用一个字符串表示... 此类题目要明白两点: 1. 打表:用数组下标索引字符.同一时候注意假设从字符相应回数字: int index = (st ...
- Spring中的FactoryBean
从SessionFactory说起: 在使用SSH集成开发的时候,我们有时候会在applicationContext.xml中配置Hibernate的信息,以下是配置SessionFactory的一段 ...
- C#检查foreach为null判断
1.foreach遍历列表或数组时,如果list或数组为null,就会报错,如下图: 2.不知道微软封装foreach的为什么不先检查要遍历的对象是否为null,这样就导致,我们在写代码时,遍历列表时 ...