AsyncTask能夠適當地、簡單地用於 UI線程。這個類准許執行後臺操作,讓那些沒有熟練操作線程的操作者在 UI線程上發佈結果。
異步任務的定義是一個在後臺線程上運行,其結果是在 UI線程上發表的計算。、
異步任務被定義成三種一般類型: Params, Progress和 Result;
四步: begin , doInBackground , processProgress和end.
自己寫的練習
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
//AsyncTask.execute()要在主線程裏調用 ,新建了一堆線程,寫這麼多是爲了便於查看效果
new AsyncLoader().execute("aaaa");
new AsyncLoader().execute("bbbb");
new AsyncLoader().execute("cccc");
new AsyncLoader().execute("dddd");
new AsyncLoader().execute("eeee");
new AsyncLoader().execute("ffff");
}
}
//AsyncTask
class AsyncLoader extends AsyncTask<String, Integer, Integer>{
@Override
protected Integer doInBackground(String... arg0) {
Log.i("AsyncLoader", "doInBackground:"+arg0[0]);
for (int i = 0; i < 2; i++) {
publishProgress(i);//發送更新進度消息
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return 0;
}
@Override
protected void onCancelled() {
Log.i("AsyncLoader", "onCancelled");
super.onCancelled();
}
@Override
protected void onPostExecute(Integer result) {
Log.i("AsyncLoader", "onPostExecute:result="+result);
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Integer... values) {
//打印進度
Log.i("AsyncLoader", "progress:"+ values[0]);
super.onProgressUpdate(values);
}
}
}
在網上找到一篇博客:http://lichen.blog.51cto.com/697816/486868,寫的不錯