handler和message传值两例

本文通过两个实例介绍Android中Handler消息机制的应用。实例一展示了如何利用Handler更新UI显示系统时间;实例二则演示了如何通过Handler控制进度条的动态变化。

程序效果:为了显示如何用message传值的简单例子

例1,点击按钮,持续显示当前系统时间(bundle传值,耗时,效率低)

例2,点击按钮,progressbar持续前进(message方法传值,效率高,但只能传整型int和对象object)

例1,主activity

package com.song;  
  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.TextView;  
  
public class C91_HandlerActivity extends Activity {  
    /** Called when the activity is first created. */  
    TextView textview;  
    Button button;  
    MyThread mythread;  
    Thread thread;  
    MyHandler handler;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        textview=(TextView)findViewById(R.id.textview);  
        button=(Button)findViewById(R.id.button);  
        handler=new MyHandler();  
        button.setOnClickListener(new OnClickListener() {  
              
            @Override  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                mythread=new MyThread();  
                thread=new Thread(mythread);  
                thread.start();  
            }  
        });  
    }  
    class MyHandler extends Handler  
    {  
        //接受message的信息  
        @Override  
        public void handleMessage(Message msg) {  
            // TODO Auto-generated method stub  
            super.handleMessage(msg);  
            if(msg.what==1)  
            {  
                textview.setText(msg.getData().getString("time"));  
            }  
              
        }  
    }  
    class MyThread implements Runnable  
    {  
  
        @Override  
        public void run() {  
            // TODO Auto-generated method stub  
            while(true)  
            {  
                try {  
                    Thread.sleep(1000);  
                    String time=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date());  
                    System.out.println(time);  
                    Message message=new Message();  
                    Bundle bundle=new Bundle();  
                    bundle.putString("time", time);  
                    message.setData(bundle);//bundle传值,耗时,效率低  
                    handler.sendMessage(message);//发送message信息  
                    message.what=1;//标志是哪个线程传数据  
                    //message有四个传值方法,  
                    //两个传int整型数据的方法message.arg1,message.arg2  
                    //一个传对象数据的方法message.obj  
                    //一个bandle传值方法  
  
                } catch (InterruptedException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
        }  
          
    }  
}  
package com.song;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.ProgressBar;  
  
public class C92_Handler2Activity extends Activity {  
    /** Called when the activity is first created. */  
    Button button;  
    ProgressBar bar;  
    MyThread mythread;  
    Thread thread;  
    MyHandler handler;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        button=(Button)findViewById(R.id.button);  
        bar=(ProgressBar)findViewById(R.id.bar);  
        handler=new MyHandler();  
        button.setOnClickListener(new OnClickListener() {  
              
            @Override  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                mythread=new MyThread();  
                thread=new Thread(mythread);  
                thread.start();  
            }  
        });     
    }   
    class MyHandler extends Handler  
    {  
        @Override  
        public void handleMessage(Message msg) {  
            // TODO Auto-generated method stub  
            super.handleMessage(msg);  
            if(msg.what==1)  
            {  
                System.out.println(msg.arg1+"handle");  
                bar.setProgress(msg.arg1);  
            }  
        }  
    }  
    
    class MyThread implements Runnable  
    {  
        int pro=0;  
        @Override  
        public void run() {  
            // TODO Auto-generated method stub  
            while(true)  
            {  
                try {  
                    Thread.sleep(1000);  
                    pro=bar.getProgress()+1;  
                    bar.setProgress(pro);   
                    System.out.println(pro+"thread");  
                    Message message=new Message();  
                    message.arg1=pro;  
                    message.what=1;  
                    handler.sendMessage(message);  
                      
                } catch (InterruptedException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
                  
            }  
        }  
          
    }  
     
}  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值