边做边学吧。
-----------------------layout/async.xml--------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<TextView
android:id="@+id/text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:id="@+id/startTask"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="startTask"
/>
<ListView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/contentListView"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll">
</ListView>
</LinearLayout>
===============================用来模拟一个比较耗时的操作,比如从网站下载XML 文件并呈现到ListView上面的东西吧。
package com.dhanzhang;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class AsyncTaskDemo extends Activity {
private TextView mTextView,Text2;
private Button mStartTask ;
private ListView lv ;
private readData rd;
static SimpleDateFormat sf = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss.SSS");
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.async);
setupViews();
}
public void setupViews() {
mTextView = (TextView) findViewById(R.id.text);
Text2=(TextView)findViewById(R.id.text2) ;
mStartTask=(Button)findViewById(R.id.startTask) ;
lv =(ListView) findViewById( R.id.contentListView ) ;
mStartTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( rd ==null){
rd=new readData();
mTextView.setText(
"BegTime:"+
sf.format(new Date(System.currentTimeMillis()))
);
rd.execute(new Integer[]{
1, 1,100
}) ;
}
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
if( rd !=null){
rd.cancel(true) ;
rd=null;
}
}
private class readData extends AsyncTask<Integer ,Integer, List<String>>{
int seed =0;
int step=0;
int cnt=100;
@Override
protected List<String> doInBackground(Integer... params) {
seed=params[0] ;
step=params[1] ;
cnt =params[2] ;
List<String> msg =new ArrayList<String>(cnt) ;
while ( cnt > 0){
Date d = new Date(System.currentTimeMillis());
seed += step;
String txt= String.format("%d:%d:%s", cnt , seed,sf.format(d));
msg.add(txt);
cnt +=-1 ;
}
return msg ;
}
//执行完成后传送结果给UI线程 此方法最后执行
protected void onPostExecute(List<String> msg) {
lv.setAdapter(new ArrayAdapter<String>(
AsyncTaskDemo.this,
android.R.layout.simple_list_item_1 ,
msg));
Text2.setText(
"EndTime:"+
sf.format(new Date(System.currentTimeMillis()))
);
}
}
}
======================2个记录时间的=======================
AsynaTask 的第一个泛型参数类型是对应 doInBackground()的参数类型 。第三个泛型参数类型是对应的返回类型。第二个是干嘛的,有人知道么。
SDK 版本是:Android 2.2