android中的handler到事件与消息

从“对象”看Handler:管家

在国内外,如果说android潮势不可阻挡,那么学习了解它便是顺其自然, 个中体会也就不在话下。

 

做过小程序之后,想干点大点儿的“作品”,满足满足自己的虚荣感与成就感,很荣幸的发现自己仅是井底之蛙一只。要处理一堆繁杂的任务,离开了多线程可是万万不能的。但在一次处理多线程时,又惊异的发现了Handler,它乃是线程中的“消息管家”!

 

先看看范例

package com.briliasm;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class Blog extends Activity {
    private Handler handler=new Handler();
    private  TextView tv;
    private String[] str={"hello","briliasm","android","byebye","haha"};
    private int index=0;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        index=str.length;

        tv =(TextView) this.findViewById(R.id.tv);
        new Thread(new Runnable(){

            public void run() {
                while(true){
                    try {
                        Thread.sleep(500);
                        changeLength();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
         
        }).start();
        handler=new Handler(){
         

        public void handleMessage(Message msg){
                super.handleMessage(msg);
                tv.setText(str[index]);
                tv.invalidate();
            }
        };
     
    }
    protected void changeLength() {
        if(index-1>=0){
            index-=1;
        }else
            index=4;
        handler.sendMessage(handler.obtainMessage());
    }
}


仔细看看 handler在哪几处存在:

  • 首先,它作为域存在于Blog这个activity中

private Handler handler=new Handler();

  • 在onCreate函数中被重新赋值,并实现其处理函数

handler=new Handler(){
        public void handleMessage(Message msg){
                super.handleMessage(msg);
                tv.setText(tv.getText().subString(0,length));

                tv.invalidate();
        }

};

  • 在新建的线程中发送消息

handler.sendMessage(handler.obtainMessage());

  • 作为发送消息的参数

handler.sendMessage(handler.obtainMessage());

 

很容易handler在此过程中,在管理着一切的消息——由他发送,由他接收,由他处理。倘若不叫他管家,如何又说的过去呢。的确,我暗服android设计师的构思(这只是其强大之一瞥,例如其他在MVC上的封装等),然而从面向对象的角度理解,似乎一切都那么的顺理成章,正如上面所说的,Handler对象就是我们所听过了的对象——管家。

 

细细说来,handler与线程是分不开的,即handler必附着于一个线程,它正是此线程的管家,它负责处理该线程内所有的消息

 

对事件和消息的理解

谈上文正到酣处,却已发现handler已经赤裸裸的呈现在了我的面前,它的神秘面纱已被掀开。正说到消息,顿觉有必要研究研究管家的管理对象,还有其余“事件”的那些事儿。

 

打个比方:管家正在主人院子里巡视,观察着所有到院里来的热光声电。这时,有人来敲门,这是“事件”,敲门声(信息)传到管家耳中,这是接受消息,去开门时处理消息。从计算机角度说,事件是用户发起的,消息是系统发起的,并由程序处理之。至于消息处理的具体细节,荐:了解回调函数(windows编程)!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值