Android AsyncTask的理解
来源:互联网 发布:lol网吧代理软件 编辑:程序博客网 时间:2024/04/30 17:38
1. onPreExecute:主线程中,准备耗时操作
2. doInBackground : 在子线程中执行
3. onPostExecute:主线程中,耗时操作完成后,获得数据后的回调
public class MainActivity extends Activity {
private TextView tv;
privateExecutorService pool;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
pool = Executors.newFixedThreadPool(3);
}
public void start(Viewview) {
// 3.0之前,同时执行多个线程
// 3.0之后,单线程
// 做耗时操作获得变化后的数据
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
// 3.0以下
// @1: 对应的参数是doInBackground回调中传入的参数,执行任务的参数
// @2: 进度,onProgressUpdate的参数类型
// @3:doInBackground的返回值类型,onPostExecute传入的参数类型
newAsyncTask<Integer, Integer, Integer>() {
@Override
protectedvoid onPreExecute() {
// 主线程中, 准备执行前的回调
}
@Override
protectedInteger doInBackground(Integer... params) {
// 子线程,耗时操作
intstart = params[0];
intend = params[1];
intresult = 0;
for(int i = start; i <= end; i++) {
try{
Thread.sleep(50);
}catch (InterruptedException e) {
e.printStackTrace();
}
result= i;
publishProgress(result);
}
return result;
}
@Override
protectedvoid onProgressUpdate(Integer[] values) {
// 主线程中执行, 进度改变时的回调
intprogress = values[0];
// UI更新
tv.setText(progress+ "");
};
@Override
protectedvoid onPostExecute(Integer result) {
// 主线程中,执行完成的回调
// 改变UI
tv.setText(result+ "");
}
}.execute(0,100);
} else {
// @1: 对应的参数是doInBackground回调中传入的参数,执行任务的参数
// @2: 进度,onProgressUpdate的参数类型
// @3:doInBackground的返回值类型,onPostExecute传入的参数类型
newAsyncTask<Integer, Integer, Integer>() {
@Override
protectedvoid onPreExecute() {
// 主线程中, 准备执行前的回调
}
@Override
protectedInteger doInBackground(Integer... params) {
// 子线程,耗时操作
intstart = params[0];
intend = params[1];
intresult = 0;
for(int i = start; i <= end; i++) {
try{
Thread.sleep(50);
}catch (InterruptedException e) {
e.printStackTrace();
}
result= i;
publishProgress(result);
}
return result;
}
@Override
protectedvoid onProgressUpdate(Integer[] values) {
// 主线程中执行, 进度改变时的回调
intprogress = values[0];
// UI更新
tv.setText(progress+ "");
};
@Override
protectedvoid onPostExecute(Integer result) {
// 主线程中,执行完成的回调
// 改变UI
tv.setText(result+ "");
}
}.executeOnExecutor(pool,0, 100);
}
}
}
Demo下载地址:http://download.csdn.net/detail/sanyang730/9515520
- 理解Android的AsyncTask
- Android AsyncTask的理解
- android AsyncTask的参数理解
- android AsyncTask的参数理解
- android AsyncTask的参数理解
- Android中异步类AsyncTask的理解
- Android中异步类AsyncTask的理解
- Android中异步类AsyncTask的理解
- Android中异步类AsyncTask的理解
- Android中异步类AsyncTask的理解
- Android AsyncTask理解
- Android AsyncTask理解
- Android AsyncTask理解
- Android AsyncTask理解
- Android AsyncTask理解
- Android AsyncTask 理解
- AsyncTask源码的理解
- 关于AsyncTask的理解
- 图片预加载与懒加载
- java-连接access
- 《Motion Design for iOS》(十四)
- Spring基础知识(2)
- CSS 动画的 steps()
- Android AsyncTask的理解
- 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
- 【Windows】【Runtime Error】Explorer.exe异常
- 第8章:structures, unions, and enumerations
- 待后续了解
- 数据分析/数据挖掘/机器学习---- 必读书目
- thinkphp 分组、页面跳转与ajax
- 深圳8千名滴滴司机被封号? 官方:只是平台整治
- 学会自己测天气系列八卦基础 01