看看Mainactivity的代码一下子就懂了~
AsyncTask的三个参数分别是执行参数类型,过程参数类型,结果参数类型
doInBackground 是执行
onProgressUpdate 是用publishProgress调用
onPostExecute是执行结束的时候用的
以下是代码部分
package com.example.e_asyn;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.tv1);
init();
}
public void init() {
//单核模式
//CountingTask tsk=new CountingTask();
//tsk.execute();
//多核模式
CountingTask tsk1 =new CountingTask();
tsk1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "id1");
CountingTask tsk2 =new CountingTask();
tsk2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "id2");
//直接调用
tsk2.onPreExecute("pre");//can do it
tsk2.cancel(true);
}
private class CountingTask extends AsyncTask<String, String, Integer>{
public CountingTask() {
// TODO Auto-generated constructor stub
}
@Override
//void 代表第一个参数
protected Integer doInBackground(String... line) {
// TODO Auto-generated method stub
int i=0;
while(i<100){
SystemClock.sleep(250);
i++;
if(i % 5 ==0){
String[] a={i+"",line[0]};
publishProgress(a);
}
}
return i*2;
}
//integer 代表第2个参数
protected void onProgressUpdate(String... progress) {
// TODO Auto-generated method stub
//super.onPostExecute(result);
tv1.setText(progress[0]+"%complete!"+progress[1]);
}
//integer 代表第三个参数
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
//super.onPostExecute(result);
tv1.setText("all complete!"+result.toString());
}
//@Override
protected void onPreExecute(String str) {
// TODO Auto-generated method stub
tv1.setText("beginginggingingignignigngi");
SystemClock.sleep(2000);
Log.i("tag", str);
//super.onPreExecute();
}
//@Override
protected void onCancelled() {
// TODO Auto-generated method stub
//super.onCancelled();
Log.i("tag", "cancel");
}
}
}
ok~