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();
}
}
}
其实就这么点代码,具体步骤就是这样,相信大家都能看懂。