Android 开发中的  AsyncTask 的用法记录

边做边学吧。 

-----------------------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 






posted on 2011-08-19 12:56  老代哥哥  阅读(251)  评论(0编辑  收藏  举报

导航