Android(安卓)开发 —— Handler的使用
16lz
2021-01-25
最近通过看mars的视频学Android,下面是关于handler的一些笔记。 使用Handler创建一个Runnable任务并加入队列。
其实Handler的存在还有另一个意义,那就是处理Message。 每个Handler都属于创建它的那个ui线程,这一线程有一个相应的MessageQueue(再新建线程时不会另外创建队列,这一队列可用来做线程间和同一线程不同组件间的通信),使用Handler可以将一个Message加入到消息队列中,并定义收到此消息的处理方法(通过在定义Handler时重写handleMessage方法)。
- 创建Handler对象和一个相应的Runnable对象
- 后者即为Java中常用的线程(Thread)中涉及到的Runnable
- 使用post(或postDelayed)方法将Runnable对象放入执行队列,注意这并不代表任务会马上得到执行的机会
- 通过在Runnable中postDelayed自身可以实现循环任务
- 使用handler.removeCallback取消已被post的任务
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)。
更多相关文章
- 当Android遇上设计模式之建造者(Builder)模式
- 【Android(安卓)源码解析】浅谈DecorView与ViewRootImpl
- HTML5 VIDEO
- Android(安卓)IPC机制(二)用Messenger进行进程间通信
- Android异步加载之AsyncTask
- Android应用资源---绘制资源类型(Drawable)(一)
- Android下从网络上获取图片的方法 学习笔记
- AsyncTask使用详解及源码分析
- android Activity之间数据传递 Parcelable和Serializable接口的