最近通过看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)。

更多相关文章

  1. 当Android遇上设计模式之建造者(Builder)模式
  2. 【Android(安卓)源码解析】浅谈DecorView与ViewRootImpl
  3. HTML5 VIDEO
  4. Android(安卓)IPC机制(二)用Messenger进行进程间通信
  5. Android异步加载之AsyncTask
  6. Android应用资源---绘制资源类型(Drawable)(一)
  7. Android下从网络上获取图片的方法 学习笔记
  8. AsyncTask使用详解及源码分析
  9. android Activity之间数据传递 Parcelable和Serializable接口的

随机推荐

  1. 浅析:为何到现在高端Android集成解决方案
  2. Android之如何学习
  3. 深入Android 【一】 —— 序及开篇
  4. TextView 在xml文件中的解释 android
  5. android service 生命周期
  6. Android M 新的运行时权限开发者需要知道
  7. Android Studio系列教程六--Gradle多渠道
  8. Android(安卓)获取网络时间
  9. Android中的线程与进程之间的关系简单解
  10. 谁说Android的动画不廉价(四)之元素动画