您的位置:首页 > 移动开发 > Android开发

Android 开发 —— Handler的使用

2012-05-20 00:54 288 查看
最近通过看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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: