AsyncTaskTest

class Log 
{    static void i(String logMe) 
    {
        android.util.Log.i("hyz", logMe);
    }

}

package hyz.com; import zte.com.cn.R; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import hyz.com.Log;

public class AsyncTaskTest01 extends Activity implements OnClickListener {  private Button bt1,bt2,bt3;  private TextView tv;  private ProgressBar pb;  private Sleep sp;  @Override  public void onCreate(Bundle savedInstanceState)  {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   bt1 = (Button)findViewById(R.id.bt1);   bt1.setOnClickListener(this);   bt2 = (Button)findViewById(R.id.bt2);   bt2.setOnClickListener(this);   bt3 = (Button)findViewById(R.id.bt3);   bt3.setOnClickListener(this);     tv = (TextView)findViewById(R.id.tv);   pb = (ProgressBar)findViewById(R.id.progress_bar);  }     @Override  public void onClick(View v)     {      //按bt1表示在同一线程下延时5秒,再按bt3不会立即响应。由于是同一线程,Activity休眠期点击不能立即输出。。。      if(v.equals(bt1))      {       sp = new Sleep();       sp.sleep5();      }      //按bt2表示在不同线程下延时5秒,再按bt3会立即响应,由于是异步线程,Activity休眠期点击也能立即输出。。。      if(v.equals(bt2))      {       //execute()方法启动了一个新线程,新线程执行的是doInBackground()方法,1000、3、10、5是doInBackground()的参数值       new FirstAsyncTask().execute(1000,3,10,5);                }      if(v.equals(bt3))      {       Log.i("在同一线程和不同线程下,Activity休眠期点击输出日志情况。。。");      }  }     //异步操作类     //第一个Integer定义的是:doInBackground()参数类型     //第二个Integer定义的是:onProgressUpdate()参数类型     //String定义的是doInBackground()返回值类型和onPostExecute()参数类型     class FirstAsyncTask extends AsyncTask<Integer, Integer, String>     {      public FirstAsyncTask( )      {         super();   }         //还是在原来UI线程中调用,执行execute()先执行onPreExecute(),再执行doInBackground(),      //doInBackground()结束后返回并告诉UI线程,UI线程开始执行onPostExecute()   @Override   protected void onPreExecute()   {    tv.setText("开始执行异步操作。。。");    super.onPreExecute();   }   //在新线程中操作,arg0是变长数组,通过execute()方法传值   protected String doInBackground(Integer... arg0)   {    sp = new Sleep();    sp.sleep5();    int i = 10;    for(;i<=100;i=i+10)      {           /*       * 每次调用这个方法,都会触发onProgressUpdate()执行,       * i即为onProgressUpdate(Integer... values)参数值,       * 有了此方法就可以在另外一个线程中操作原来UI线程了       */      publishProgress(i);      sp.sleep1();     }    return "异步操作执行结束。。。"+arg0[3];   }   //doInBackground()结束后执行,还是在原来UI线程中调用,result为doInBackground()的返回值   @Override   protected void onPostExecute(String result)   {    tv.setText(result);      }   //配合doInBackground()里的publishProgress()使用,values为publishProgress(i)里的i值   @Override   protected void onProgressUpdate(Integer... values)   {    pb.setProgress(values[0]);    super.onProgressUpdate(values);   }     }     class Sleep     {           protected void sleep5()      {    try    {     Thread.sleep(5000);    }    catch(InterruptedException e)    {     e.printStackTrace();    }      }      protected void sleep1()      {    try    {     Thread.sleep(1000);    }    catch(InterruptedException e)    {     e.printStackTrace();    }      }     } }

 
<?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"
    >
    <Button
    	android:id="@+id/bt1"
    	android:text="ctivity在同一线程中休眠5s"
    	android:layout_width="fill_parent" 
        android:layout_height="wrap_content"/> 
    <Button
    	android:id="@+id/bt2"
    	android:text="Activity在新线程中休眠5s"
    	android:layout_width="fill_parent" 
        android:layout_height="wrap_content"/>        
    <Button
    	android:id="@+id/bt3"
    	android:text="同一线程和不同线程休眠期输出日志情况"
    	android:layout_width="fill_parent" 
        android:layout_height="wrap_content"/>          
	<TextView  
		android:id="@+id/tv"
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content"/>
 	<ProgressBar
		android:id="@+id/progress_bar"
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content"
		style="?android:attr/progressBarStyleHorizontal"/>
</LinearLayout>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值