Handler

使用Handler创建一个Runnable任务并加入队列。
  • 创建Handler对象和一个相应的Runnable对象
  • 后者即为Java中常用的线程(Thread)中涉及到的Runnable
  • 使用post(或postDelayed)方法将Runnable对象放入执行队列,注意这并不代表任务会马上得到执行的机会
  • 通过在Runnable中postDelayed自身可以实现循环任务
  • 使用handler.removeCallback取消已被post的任务
以上就是Handler最基本的用法了。需要极为注意的一点是,通过以上方法使用handler,即在当前Activity类中直接创建Runnable对象和Handler对象的话,实际上我们并没有创建新线程!Runnable所在的线程其实就是当前的Activity线程。这就相当于我们用Thread的时候在自己的类中实现Runnable接口并调用了this.start(),其实是同一线程。 所以一般在使用的时候我们可以这样:
HandlerThread ht=new HandlerThread("Thread name");
ht.start();
MyHandler mh=new MyHandler(ht.getLooper());

其中MyHandler继承了Handler,重写handlerMessage方法。这样我们的Handler就在新线程中了。可以用来在后台处理一些耗时的操作。

其实Handler的存在还有另一个意义,那就是处理Message。
每个Handler都属于创建它的那个ui线程,这一线程有一个相应的MessageQueue(再新建线程时不会另外创建队列,这一队列可用来做线程间和同一线程不同组件间的通信),使用Handler可以将一个Message加入到消息队列中,并定义收到此消息的处理方法(通过在定义Handler时重写handleMessage方法)。
  • 得到Message对象:handler.obtainMessage。使用new Message()是不推荐的。
  • 如果需要传递的信息较少可通过直接赋值给msg.arg1 arg2 和obj成员变量来传递,否则使用setData
  •  handler.sendMessage(msg)。
更多 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值