本文介绍了Android的活套和调用堆栈的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我不知道如何弯针类实际上是在线程处理的Runnable(通过Handler类)的活套连接到?如果一个活套是通过其循环的MessageQueue那么肯定,这将是该线程阻塞操作?我想它本身必须执行一些挂羊头卖狗肉穿线但它是如何添加发布的Runnable run()方法到主机线程栈?
很多问题!任何帮助将是非常美联社preciated。谢谢!
编辑:
通过尺蠖<一个展望href=\"http://$c$csearch.google.com/$c$csearch#uX1GffpyOZk/core/java/android/os/Looper.java&q=package%3aandroid.git.kernel.org%20file%3aandroid/os/Looper.java&l=1\"相对=nofollow>类文件类我看到下面的,它混淆了我更加为所有评论指在主线程,而且运行的尺蠖在等待有关的MessageQueue新邮件的阻塞操作。这是如何不堵UI /主线程?
/ **
*运行在这个线程消息队列。一定要打电话
* {@link #quit()}结束循环。
* /
公共静态最后的无效循环(){
尺蠖我= myLooper();
的MessageQueue队列= me.mQueue; //确保该线程的身份是当地的过程中,
//并跟踪是什么身份令牌实际上是。
Binder.clearCallingIdentity();
最终长的ident = Binder.clearCallingIdentity(); 而(真){
消息味精= queue.next(); //可能会阻止
//如果(!me.mRun){
//突破;
//}
如果(MSG!= NULL){
如果(msg.target == NULL){
//没有目标是一个神奇的标识符退出消息。
返回;
}
如果(me.mLogging!= NULL)me.mLogging.println(
&GT;&GT;&GT;&GT;&GT;调度为+ msg.target +
+ msg.callback +:+ msg.what
);
msg.target.dispatchMessage(MSG);
如果(me.mLogging!= NULL)me.mLogging.println(
&LT;&LT;&LT;&LT;&LT;成品为+ msg.target +
+ msg.callback); //该调度过程中确保
//线程的标识没有损坏。
最终长newIdent = Binder.clearCallingIdentity();
如果(IDENT!= newIdent){
Log.wtf(活套,线程标识从0X改为
+ Long.toHexString(IDENT)+来0X
+ Long.toHexString(newIdent)+,同时指派给
+ msg.target.getClass()。的getName()+
+ msg.callback +什么=+ msg.what);
} msg.recycle();
}
}
}
/ **
*返回应用程序的主尺蠖,它生活在应用程序的主线程。
* /
公共同步静态最终活套getMainLooper(){
返回mMainLooper;
} / **
*返回与当前线程相关的Looper对象。返回
* NULL如果调用线程不与活套有关。
* /
公共静态最后的活套myLooper(){
返回(活套)sThreadLocal.get();
} // sThreadLocal.get()将返回null,除非你叫prepare()。
私有静态最后的ThreadLocal sThreadLocal =新的ThreadLocal(); / **初始化当前线程作为一个活套。
*这给你一个机会,建立处理程序然后引用
*此尺蠖,实际开始循环之前。一定要打电话
* {@link #LOOP()}调用此方法后,并通过调用它结束
* {@link #quit()}。
* /
公共静态最终无效prepare(){
如果(sThreadLocal.get()!= NULL){
抛出新的RuntimeException(只有一条环线可以每个线程创建);
}
sThreadLocal.set(新活套());
}
解决方案
好吧,看着周围堆栈,我发现一个问题,回答我的。我的主要困惑是从没有从this帖子。我被错误地以为一切的除了张贴到处理程序的东西(并加入到活套的MessageQueue)正在以线性调用栈执行,但考虑它,这是更可能如何与一个UI任何程序被执行,并且使一个更有意义的UI线程上的每一件事情源于活套,并在此线程excecution的所有路径会导致回吧!感谢Berdon企图回答我的问题,我确定我没有解释我的问题不够好:)
这篇关于Android的活套和调用堆栈的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!