下图Android中线程的区别

郏高阳 发布于 2013/09/04 09:45
阅读 214
收藏 1

android中这两种写法有什么区别吗?

加载中
0
loki_lan
loki_lan
后者的Looper是在Handler里面传Message才用的。
0
狄仁傑
狄仁傑
简单点来讲 上面跟下面的写法简直一点关系都没有,一个是起个线程,另外一个是子线程里handler的使用
0
ArrayListt
ArrayListt

第一个没有操作View的情况下使用

第二个是有操作View的情况下使用


0
Endroid
Endroid

每个线程都有自己的Handler、Looper、MessageQueue,

当在自己的线程内使用:

Looper.prepare();

方法时,是获得当前线程的Looper,

而在某一线程内使用

new Handler() 

只能获取当前线程的Handler

线程间的通信,是为了让一个线程发消息(Message)到另一个线程去并处理。

所以一般来说是,在待处理消息的线程(Target Thread)里获得当前线程的Handler,而在发信息的线程(Send Thread)里组织消息并向Target Thread发送消息,当即被添加到Target Thread的Message Queue里,并用Target Thread的Looper来循环处理消息,然后再用Target Thread的handler来处理发过来相应标识(msg.what)的消息。

个人理解是:如果在主线程里使用Looper.loop()循环起来只是为了让主线程或者叫Activity线程(还叫UI线程)去循环处理其他的系统的Hanlder去处理管理Activity的各种消息(当然你现在看不到),而主动声明Handler是为了处理我们自己要处理的消息

Endroid
Endroid
回复 @孙银伟 : 谢谢补充,我说的不严谨
孙银伟
孙银伟
不是每个线程都有自己的Looper。必需在Thread的run方法中调用Looper.prepare();才会使得当前Thread有自己的Looper,或者继承HandlerThread. 参考http://developer.android.com/reference/android/os/Looper.html
0
孙银伟
孙银伟
第二中方式当前Thread有自己的Looper,使得其他线程能够给它发消息。
返回顶部
顶部