Android消息机制---handle

在某些情况下,主界面需要通过某种方式来实现当前页面UI的更改,如:发送验证码时,提示你还有多少秒可以重新发送。在这种情况下需要使用线程来实现,但是安卓机制中主程序不能进行耗时的任务,所以需要使用线程来实现。

例子:实现一个计时器,时间为100秒,倒计时至0; 方法:在点击按钮中添加一个进程,进程执行一次休眠一秒,执行后需要传递当前剩余的时间值,重写handle的handlemessage方法,在此方法中实现ui的更改。备注:(可以不使用内部类,下面为两种书写形式)

public class MainActivity extends Activity {
Button button;
TextView textview;
int count=100;
Handler hand;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button) findViewById(R.id.button);
        textview=(TextView) findViewById(R.id.textview);
//        hand=new Handler(){
//            @Override
//            public void handleMessage(Message msg) {
//                // TODO Auto-generated method stub
//                switch (msg.what) {
//                case 1:
//                    textview.setText(msg.obj+"");
//                    //textview.setText("456");
//                    break;
//
//                default:
//                    break;
//                }
//            }
//        };
        //注释的为一种方法,下面为另一种方法
        hand=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                super.handleMessage(msg);
                switch (msg.what) {
                case 1:
                    Bundle bu=msg.getData();
                    int i=bu.getInt("key");
                    textview.setText(i+"");
                    break;

                default:
                    break;
                }
            }
        };
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                new test1().start();
            }
        });
        //下面方法可行!
//        button.setOnClickListener(new OnClickListener() {
//            
//            @Override
//            public void onClick(View arg0) {
//                    //new test().start();;
//                new Thread(){
//                    @Override
//                    public void run() {
//                        // TODO Auto-generated method stub
//                        while(count>=0){
//                        Message message=hand.obtainMessage();
//                        message.what=1;
//                        message.obj=count;
//                        hand.sendMessage(message);
//                        count--;
//                        try {
//                            Thread.sleep(1000);
//                        } catch (InterruptedException e) {
//                            // TODO Auto-generated catch block
//                            e.printStackTrace();
//                        }
//                        }
//                        //Looper.loop();
//                    }
//                }.start();;
//            }
//        });
    }
    
class test extends Thread{
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(count>=0){
        Message message=hand.obtainMessage();
        message.what=1;
        message.obj=count;
        hand.sendMessage(message);
        count--;
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
        //Looper.loop();
    }

}


class test1 extends Thread{
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(count>=0){
        Message message=new Message();
        message.what=1;
        Bundle data=new Bundle();
        data.putInt("key", count);
        message.setData(data);;
        hand.sendMessage(message);
        count--;
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
        //Looper.loop();
    }

}




}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值