Handler发送消息小结

字数283 阅读210 评论0 喜欢1
  1. obtainMessage()得到一个Message对象。

创建一个Message然后发送是这么写的:

   Message msg = new Message();
msg.arg1 = 1;
msg.arg2 = 2;
msg.what = 3;
msg.obj = Object;
handler.sendMessage(msg);

性能优化后这样写:

   Message msg = handler.obtainMessage();
msg.arg1 = 1;
msg.arg2 = 2;
msg.what = 3;
msg.obj = Object;
handler.sendMessage(msg);

相当于:

   Message msg = handler.obtainMessage(int what,int arg1, int arg2, Object obj )
handler.sendMessage(msg);

再简练一点(这段代码在创建的Message中只传入两个参数,并让handler延迟10ms发送消息):

 handler.sendMessageDelayed(handler.obtainMessage(int what,Object obj), 10);

至于接受消息,肯定是在handleMessage(Message msg)中:

Handler handler = new Handler(){
public void handleMessage(Message msg) {
super.handleMessage(msg);
//接收Message发送的消息 msg.what msg.arg1 msg.arg2 msg.obj
//这里msg.obj需要强转成你传过来的数据类型
}
};

给个实例看一看:

public boolean onTouch(View view, MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_UP) {
handler.sendMessageDelayed(handler.obtainMessage(TOUCH_EVENT_ID,view), 10);
}
return false;
} Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//msg.obj强转成View类型(传过来的obj是一个View类型的参数)
View scroller = (View)msg.obj;
if(msg.what==TOUCH_EVENT_ID) {
......
}
}
};

Handler发送消息的更多相关文章

  1. [Android]Handler的消息机制

    最经面试中,技术面试中有一个是Handler的消息机制,细细想想,我经常用到的Handler无非是在主线程(或者说Activity)新建一个Handler对象,另外一个Thread是异步加载数据,同时 ...

  2. Handler实现消息的定时发送

    话不多说,直接上代码 private Handler mHandler = new Handler() { @Override public void handleMessage(Message ms ...

  3. (原)Android在子线程用handler发送的消息,主线程是怎么loop到的?

    来自知乎:https://www.zhihu.com/question/48130951?sort=created   大家都知道Android的Looper是ThreadLocal方式实现,每个线程 ...

  4. 使用Handlerf发送消息或使用Handler轮询时,报错IllegalStateException:This message is already in use.;

    java.lang.IllegalStateException: { when=-107ms what=9 obj=com.saicmaxus.maxuslife.model.CarInfo@be47 ...

  5. Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)

    keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...

  6. Android Handler类 发送消息-post()和postDelay(), Looper讲解

    https://blog.csdn.net/weixin_41101173/article/details/79701832 首先,post和postDelay都是Handler的方法,用以在子线程中 ...

  7. android handler传递消息机制

    当工作线程给主线程发送消息时,因为主线程是有looper的,所以不需要初始化looper,注意给谁发消息就关联谁的handler,此时用的就是主线程的handler handler会把消息发送到Mes ...

  8. Thread+Handler 线程 消息循环(转载)

    近来找了一些关于android线程间通信的资料,整理学习了一下,并制作了一个简单的例子. andriod提供了 Handler 和 Looper 来满足线程间的通信.例如一个子线程从网络上下载了一副图 ...

  9. Android 主线程和线程之间相互发送消息

    通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...

随机推荐

  1. 理解js闭包(二)

    @(编程) 一.什么是闭包? 官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他 ...

  2. hdu 4289 Control(最小割 + 拆点)

    http://acm.hdu.edu.cn/showproblem.php?pid=4289 Control Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  3. AVAST 4.8

    AVAST专业版注册序列号不能用了就换一个继续注册,接着用序列号:S9665355R9665P1106-YCX4AKKT (2012.5.3)S7592769R8591F1106-ZVDJPMLT ( ...

  4. Android 通过ViewFlipper实现广告轮播功能并可以通过手势滑动进行广告切换

    为了实现广告轮播功能,在网上找了很多方法,有的效果很好,但是代码太麻烦,并且大多是用的viewpager,总之不是很满意. 于是看了一下sdk有个控件是ViewFlipper,使用比较方便,于是尝试了 ...

  5. 手把手教你玩转SOCKET模型之重叠I/O篇(下)

    四.     实现重叠模型的步骤 作 了这么多的准备工作,费了这么多的笔墨,我们终于可以开始着手编码了.其实慢慢的你就会明白,要想透析重叠结构的内部原理也许是要费点功夫,但是只是学会 如何来使用它,却 ...

  6. My集合框架第四弹 HashTable(链表解决冲突)

    package com.wpr.collection; import java.util.LinkedList; import java.util.List; public class HashTab ...

  7. sql with(lock) 与事务

    sql  select查询语句 表后面携带 with(nolock) 会获取到 在事务中已经执行 但还未完成提交的 记录   即使表被锁住也能查询到 当事务最终执行失败时  查询到的记录可能没有啦 不 ...

  8. 关于heritrix安装配置时出现”必须限制口令文件读取访问权限”的解决方法

    转载:http://www.floatinglife.cn/关于heritrix安装配置时出现必须限制口令文件读取访问 最近开始写一个RSS聚合程序,需要爬虫支持,于是就整来heritrix,没想到, ...

  9. installshield basic msi 更新时覆盖不了上一个版本文件解决方案1

    1.增加dll exe程序集的版本号 2.设置IS里文件的Set key file

  10. List排序忽略大小写

    public List<String> sortListIgnoreCase(List<String> list) {        Collections.sort(list ...