异步task是一个线程,但是可以和ui主线程交互。
他可以传入参数,参数传入doInBackground(Integer... params)。doInBackground(Integer... params)的返回值作为result,传递给onPostExecute作为参数。doInBackground(Integer... params)方法中调用了 publishProgress(p)方法,在此方法调用后就会直接触发 protected void onProgressUpdate(Integer... progress),p作为参数传递给progress。
实例:
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class AsyncTaskTest extends Activity {
TextView tv;
final String TAG="AsyncTaskTest";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.textView1);
new MyTask().execute(6, 12, 7);
}
class MyTask extends AsyncTask<Integer, Integer, Integer> {
//此方法是在调用doInBackground之前调用的,主要做一些准备工作,例如打开一个进度调对话框。
@Override
protected void onPreExecute() {
super.onPreExecute();
tv.setText("test");
Log.e(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "onPreExecute()");
}
//这里是要在后台线程中做的事情,只要这一个方法是后台线程的,其余的方法都是操作前台的,所有的操作 都用于前台。
@Override
protected Integer doInBackground(Integer... params) {
Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "doInBackground()");
int p = 0;
for (int index = 0; index < params.length; index++) {
int num = params[index];
for (int j = 0; j < num; j++) {
if (num - j <= 0) {
break;
}
p++;
publishProgress(p);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return p;
}
@Override
protected void onProgressUpdate(Integer... progress) {
Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "onProgressUpdate()");
tv.append("\nProgress: " + progress[0]);
}
//doInBackground的return值是传入的result,是在doInBackground做完后执行的操作。
@Override
protected void onPostExecute(Integer result) {
Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "onPostExecute()");
tv.append("\nFinished. Result: " + result);
}
@Override
protected void onCancelled() {
super.onCancelled();
Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "onCancelled()");
}
}
}
分享到:
相关推荐
这是一个完整的android AsyncTask异步任务的完整实例的demo,你可以直接运行在虚拟机和真实机
安卓异步加载的使用,写的蛮详细的~
Android 的 UI 线程主要负责处理用户的按键事件、触屏事件等。...但由于新线程不允许直接更新山 I 组件,为了解决这个问题,Android 提供了异步任务 (AsyncTask) 的方式实现异步线程的操作。
主要介绍了Android中异步类AsyncTask用法,分析总结了Async Task类的功能、特点及相关的使用技巧与注意事项,需要的朋友可以参考下
AsyncTask下载大文件并可以取消异步任务
AsyncTask是Thread和handler结合的工具类,记录一下,里面记录了关于AsyncTask几个比较重要的方法,如何实现并行和串行执行任务。
异步任务Asynctask源码与反编译对比,来分析源代码
减少了许多重复的工作,是一个Google的AsyncTask的精简版(使用Google的AsyncTask,内部开销比较大,不适合简单开发,对于比较负责或者要求多线程异步任务的时候比较适合使用Google的AsyncTask)
RxJava封装异步任务RxAsyncTask
AsyncTask是个好东西,能处理绝大多数应用线程和更新UI的任务,由于其内部使用了静态线程池,如果你有一堆异步任务(例如全局定时更新数据、同一个Activity中多个AsyncTask同时执行)其中有不能马上执行完的情况...
android asyncTask的使用,通过简单的实例来说明Task异步类的使用
AsyncTask-生命周期Asynctask生命周期此android应用程序描述了在不同情况下异步任务的生命周期。 如果活动被破坏,暂停或应用程序被杀死,当前正在运行的asyncTask会... 还使用异步任务的task.cancel()方法取消任务
AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。其实AsyncTask并不是那么好,甚至有些糟糕。本文我会讲AsyncTask会引起哪些问题,如何修复这些问题,并且关于AsyncTask的一些替代方案...
AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。其实AsyncTask并不是那么好,甚至有些糟糕。本文我会讲AsyncTask会引起哪些问题,如何修复这些问题,并且关于AsyncTask的一些替代方案...
Android异步操作----AsyncTask类
AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。其实AsyncTask并不是那么好,甚至有些糟糕。本文我会讲AsyncTask会引起哪些问题,如何修复这些问题,并且关于AsyncTask的一些替代方案...
public class MyTask extends AsyncTask<Params> 我们来说一下这三个泛型的作用: Params: 调用异步任务时传入的类型 ; Progress : 字面意思上说是进度条, 实际上就是动态的由子线程向主线程publish数据的类型 ...
Android的日常开发中,经常需要处理异步任务,系统提供的Handler和Asynctask实在不方便,一些开源的第三方库由于过于庞大和复杂,例如RxJava,虽然很方便,但RxJava在团队中不容易推广,所以实现了一个简洁、方便、...
我见过太多项目,其中AsyncTask和线程通常是在没有考虑的情况下完成的。 我什至看过匿名的AyncTask实现:( TaskExecutor将所有异步活动整合到一个ExecutorService中,可以通过一个唯一查询的服务在所有Activity应用...