Android 开发 —— Handler的使用

来源:互联网 发布:微信专用淘宝链接转换 编辑:程序博客网 时间:2024/06/07 23:27

转载自:http://blog.csdn.net/tangwing/article/details/7583669

最近通过看mars的视频学Android,下面是关于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)。

例子:http://www.jb51.net/article/43360.htm



0 0
原创粉丝点击