移除消息的方法,共5个

 

0、 一个参数,接受一个int值

    public final void removeMessages(int what) {        mQueue.removeMessages(this, what, null);    }

局部变量what持有的int值最终会传入到Handler持有的MessageQueue对象mQueue的removeMessages()方法中,removeMessages接受三个参数,第一个是当前Handler对象,第二个就是当前传入的what值,最后一个参数这里传的是null,该参数接受的类型是Object。此后MessageQueue就会在它持有的消息队列中,把what值匹配的所有Message对象都删除掉

 

1、两个参数,接受一个int值,接受一个Object对象

    public final void removeMessages(int what, Object object) {        mQueue.removeMessages(this, what, object);    }

跟(1号知识点)一样,也是调用了MessageQueue的removeMessages方法,不同的是这次可以多传入一个要匹配的Object对象,what值与Object对象,正是每个Message的what和obj可以持有的值与对象,此处只有what值相等、object也相等的所有Message对象,都会从MessageQueue里面的消息队列中被移除,此处object参数也可以传入null,这样只要消息队列中的what值匹配的所有Message就会被移除掉(等同于0号知识点)

 

2、一个参数,接受一个Runnable对象

    public final void removeCallbacks(Runnable r)    {        mQueue.removeMessages(this, r, null);    }

调用了Handler持有的MessageQueue的removeMessages方法,将当前Handler对象、Runnable对象、以及一个null值均传了进去,此处会对消息队列中的所有未执行的Message进行遍历,所有匹配Runnable的Message都将被从MessageQueue持有的单链表中移除掉

 

3、两个参数,接受一个Runnable对象、一个Object对象

    public final void removeCallbacks(Runnable r, Object token)    {        mQueue.removeMessages(this, r, token);    }

Runnable对象与Object同时匹配的Message,会从MessageQueue全部移除,此处的token也可以传null,此时该方法与上文中(3号知识点)的方法是一样的作用,当然这些参数仍是会传递给MessageQueue的removceMessages方法

 

4、一个参数,接受一个Object对象

    public final void removeCallbacksAndMessages(Object token) {        mQueue.removeCallbacksAndMessages(this, token);    }

该Object对象token作为一个标记,它会传入到MessageQueue中到的removeCallbacksAndMessages中,在removeCallbacksAndMessages方法内部,会判断消息队列中每一个Message持有的obj字段与token指向的是不是一个对象,若相同,则会将这些匹配的Message全部会移除掉。此处的token也可以传null,这将会将所有消息全部干掉。

 

 

总结:

a、send系列方法提交的Message,需要移除的时候选用参数带有what的remove方法

b、post系列方法提交的Message,需要移除的时候选用参数为Runnable的remove方法

c、上文中remove系列方法的第一个参数均是当前Handler对象,说明这些移除方法只是将MessageQueue中对应的Handler发送的消息进行移除操作

d、可以为一个Handler发送的消息,都指定一个Object作为token,将来业务上不需要,可以根据token一下子移除掉未运行的消息,大佬真贴心

e、被移除的Message都是还未得到执行的Message,若已经执行的Message是不在MessageQueue持有的单链表中的

更多相关文章

  1. Android单元测试,模拟http的get和post请求,服务器脚本使用php
  2. Android轩辕剑之ActionBar之三
  3. Android(安卓)JNI 篇 - JNI回调的三种方法(精华篇)
  4. Android(安卓)获得Url、Uri字符串后面拼接的参数
  5. Android(安卓)xutil3.0完全解析
  6. Android画布和图形绘制---Canvas and Drawables(三)
  7. Android线程中Handle的使用
  8. Android(安卓)---- WebView与JavaScript交互调用(2)
  9. Android——Fragment介绍及两种基本使用方法

随机推荐

  1. 干货 | 聊聊这些年总结的一些学习方法
  2. 初出茅庐
  3. Android(安卓)通用的下拉刷新,重温事件传
  4. Android中Spinner的使用
  5. 怎样使用Android(安卓)studio将极光推送
  6. Android 导入项目时报Android.jar包丢失
  7. 浅析android系统设计中的回调思想
  8. Android中Adapter用法总结
  9. Android - Handler 、AsyncTask(一)
  10. Android——AS VS Eclipse