Android裏有一個自帶的異步類,裏面封裝了異步的操作方法,主要有三個操作方法
1.doInBackground 這是後臺運行的程序,就是新建了一個線程在後臺所要運行的內容,例如(網絡獲取圖片)
2.onProgressUpdate 是前臺界面的更新,後臺的操作要反映到前臺,就需要在這裏面做處理,例如(刷新前臺的圖片)
3.onPostExecute 這個就是線程結束後做的處理
在這裏面將異步分成三個步驟,好了,不多說了,讓我們看一下今天運行的程序,程序將每隔一秒鐘加入一項內容,見圖
好,接下來,我們來分析一下代碼的實現:
public class AsynDemo extends Activity {
private String[] items = { "第一項", "第二項", "第三項", "第四項", "第五項", "第六項", "第七項",
"第八項", "第九項", "第十項" };
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.asyn_layout);
listView = (ListView) findViewById(R.id.list);
//設定listView的適配器
listView.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, new ArrayList()));
//運行異步程序
new AddStringTask().execute();
}
/**
* 異步類,繼承了AsyncTask
*
*/
class AddStringTask extends AsyncTask<Void, String, Void> {
//後臺運行的程序
@Override
protected Void doInBackground(Void... arg0) {
//遍歷items數組,將每個String發給前臺
for (String s : items) {
publishProgress(s);
SystemClock.sleep(1000);
}
return null;
}
//前臺操作,將數據加入到到Adapter
@Override
protected void onProgressUpdate(String... values) {
((ArrayAdapter) listView.getAdapter()).add(values[0]);
}
//結束
@Override
protected void onPostExecute(Void result) {
Toast.makeText(AsynDemo.this, "結束", 1).show();
}
}
}
其實就這麼點代碼,具體步驟就是這樣,相信大家都能看懂。