Android中Handler的使用

这也是面试被问到的问题,本来可以说的很明白的,可是没有说好。

今天就讨论一下他的使用。


记得看书的时候,书上是讲为什么要使用handler,因为Android中的控件在主线程中,也就是UI线程,一些耗时的工作如果在主线程中启动的话,就不能操作别的东西,这样对用户体验非常不好,在用户的眼里就是,这个程序卡住了,所以一些耗时的代码要另外开启一个线程,而为了Android的安全考虑,禁止在其他线程中操作主线程中的控件,所以得用一个对象来实现,就是接下来要将的Handler。

安全和原因现在都不知道是什么东西,以后再补上。今天仅仅是考虑他的使用方法。


Handler的基本概念

Handler主要是用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。这种机制通常用来处理相对耗时较长的操作。

Handler工具类在多线程中有两个方面的应用:

1.发送消息,在不同的线程间发送消息,使用的方法为sendXXX();

android.os.Handler对象通过下面的方法发送消息;

  • sendEmptyMessage(int),发送一个空的消息
  • sendMessage(Message),发送消息,消息中可以携带参数
  • sendMessageAtTime(Message,long),未来某一时间点发送消息
  • sendMessageDelayed(Message,long),延时Nms发送消息

2.计划任务,在未来执行某任务,使用的方法为postXXX();

android.os.Handler对象通过下面的方法执行计划任务;

post(Runnable),提交计划任务马上执行

postAtTime(Runnable,long),提交计划任务在未来的时间点执行

postDelayed(Runnable,long),提交任务计划延时Nms执行



上面的也不是很懂,就把我在实际中用到的写下来吧。

在主UI中实现:

private Handler handler = new Handler(){

        @Override

        public void handlerMessage(Message msg){

               super.handleMessage(msg);

               switch(msg.what==XXX)

               .....

        }

}

在其他线程中:

Message msg = Message.obtain()

然后在给msg.what = XXX 赋值

最后发送msg,handler.sendMessage(msg);

然后在主线程中,就会根据得到的msg.what的值,该进行不同的操作。


可能有问题哈,我自己在捉摸一下。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值