博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别...
阅读量:6998 次
发布时间:2019-06-27

本文共 1321 字,大约阅读时间需要 4 分钟。

一个帖子的整理:

Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别

如果你不带参数的实例化:Handler handler = new Handler();那么这个会默认用当前线程的looper

一般而言,如果你的Handler是要来刷新操作UI的,那么就需要在主线程下跑。

情况:

1.要刷新UI,handler要用到主线程的looper。那么在主线程 Handler handler = new Handler();,如果在其他线程,也要满足这个功能的话,要Handler handler = new Handler(Looper.getMainLooper());

2.不用刷新ui,只是处理消息。 当前线程如果是主线程的话,Handler handler = new Handler();不是主线程的话,Looper.prepare(); Handler handler = new Handler();Looper.loop();或者Handler handler = new Handler(Looper.getMainLooper());

若是实例化的时候用Looper.getMainLooper()就表示放到主UI线程去处理。

如果不是的话,因为只有UI线程默认Loop.prepare();Loop.loop();过,其他线程需要手动调用这两个,否则会报错。

 

message.what,message.arg1,message.arg2,message.obj,他们在之间有什么区别呢?

 

what就是一般用来区别消息的,比如你传进去的时候msg.what = 3;

然后处理的时候判断msg.what == 3是不是成立的,是的话,表示这个消息是干嘛干嘛的(自己能区别开)

 

 

至于arg1,arg2,其实也就是两个传递数据用的,两个int值,看你自己想要用它干嘛咯。如果你的数据只是简单的int值,那么用这两个,比较方便。

 

 

其实这里你还少说了个,setData(Bundle),上面两个arg是传递简单int的,这个是传递复杂数据的。

 

 

msg.obj呢,这个就是传递数据了,msg中能够携带对象,在handleMessage的时候,可以把这个数据取出来做处理了。不过呢,如果是同一个进程,最好用上面的setData就行了,这个一般是Messenger类来用来跨进程传递可序列化的对象的,这个比起上面的来,更消耗性能一些。

http://www.cnblogs.com/xpxpxp2046/archive/2012/04/13.html

 

 

两篇不错的文章:

http://www.cnblogs.com/xpxpxp2046/archive/2012/04/13/2445395.html

http://www.cnblogs.com/xpxpxp2046/archive/2012/04/13/2445355.html

转载于:https://www.cnblogs.com/yaya-Android/p/4539001.html

你可能感兴趣的文章
UVALive 4225 Prime Bases 贪心
查看>>
Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
查看>>
[.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程...
查看>>
【转】java中float与byte[]的互转 -- 不错
查看>>
[Ogre][地形][原创]基于OgreTerrain的地形实现
查看>>
shell登录模式及其相应配置文件(转)
查看>>
Puppet常识梳理
查看>>
web.config配置文件中的configSource属性
查看>>
发现一个国内牛逼的maven仓库,速度真的太快了
查看>>
Snmp配置
查看>>
使用java实现CNN的实战
查看>>
大白话系列之C#委托与事件讲解(二)
查看>>
linux下使用 du查看某个文件或目录占用磁盘空间的大小
查看>>
iCheck表单美化插件使用方法详解(含参数、事件等)
查看>>
IOS UIAlertController 使用方法
查看>>
MySQL存储过程 事务transaction
查看>>
93. [NOIP2001] 数的划分
查看>>
c++友元实现操作符重载
查看>>
LeetCode_Maximum Depth of Binary Tree
查看>>
MongoDB入门学习(一):MongoDB的安装和管理
查看>>