handler和message传值两例

程序效果:为了显示如何用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();
				}
			}
		}
    	
    }
}
布局文件



例2,主activity

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();
				}
				
			}
		}
    	
    }
   
}

布局文件




显示效果




你可能感兴趣的:(android,其他)