程序终结者——异步任务 AsyncTask
AsyncTask 行走于UI线程和子线程之间,使用者可以轻松使用。
本文对AsyncTask的三个泛型做了粗略的介绍。
代码如下,XML就不贴了。
package com.example.threaddemo;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
tv = (TextView) findViewById(R.id.tv1);
//异步任务的使用,很简单吧
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute();
}
class MyAsyncTask extends AsyncTask<Void,Integer,String>{//<泛型>在继承该类时指定
int num = 0;
/**
* 后台线程运行
* 入参 params :类型为AsyncTask<Void,Integer,String>的第一个泛型,值由execute()的传递
* 返回值 :类型String,是 AsyncTask<Integer,Integer,String>的第三个泛型
*/
@Override
protected String doInBackground(Void... params) {
for(int i=0;i<11;i++){
num++;
try {
Thread.sleep(500);
//入参num传递给onProgressUpdate(Integer... values)的values。
//参数类型与AsyncTask<Integer,Integer,String>的第二个泛型相符
publishProgress(num);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return num+"";
}
/**
* 在UI线程运行,执行在doInBackground()之前
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
/**
* 在UI线程运行,执行在doInBackground()之后
* 形参result接收doInBackground的返回值.
*/
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
/**
* UI线程运行,由publishProgress()触发执行
* 参数values由publishProgress()传入,类型是 AsyncTask<Integer,Integer,String>的第二个泛型
*/
@Override
protected void onProgressUpdate(Integer... values) {
tv.setText(values[0]+"");
super.onProgressUpdate(values);
}
/**
* UI线程运行
*/
@Override
protected void onCancelled(String result) {
// TODO Auto-generated method stub
super.onCancelled(result);
}
/**
* UI线程运行,终止异步任务的执行,由cancel()触发执行
*/
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}
}
}