欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

怎么使用handler实现主线程往子线程传递消息

更新时间: 2014-01-05 02:34:50 责任编辑: Author_N1

 

如何使用Handler实现主线程往子线程传递消息

myThread = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (handler == null) {
Looper.prepare();
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}
};
myHandler.sendEmptyMessage(1);
Looper.loop();
Log.e("", "这是消息循环开始之后的代码");
}
}
});

如以上代码,如何能让Looper.loop();之后的代码执行呢?也就是说loop之后,不影响线程逻辑的执行~~~~求思路
--参考方法--
Looper.loop(); 之后 需要做啥?

Lopper myLopper = null;
new Thread(){
  public void run(){
     Looper.prepare();
     myLopper = Lopper.myLooper();  
     Looper.loop();
  }
}.start();

class Threadhandler extends Handler {
     public void handleMessage(Message msg) {
                          
     }

}
Threadhandler  handler = new Threadhandler(myLopper);

--参考方法--
楼主牛逼,这啥需求?语句执行到Looper.loop();后,线程会阻塞在这里,后面的语句根本无法执行。
除非让loop()消息循环退出(可以调用quit()函数),否则根本无法按照你的需求来实现。
/**
     * Run the message queue in this thread. Be sure to call
     * {@link #quit()} to end the loop.
     */
    public static void loop() {
        final Looper me = myLooper();
        if (me == null) {
            throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
        }
        final MessageQueue queue = me.mQueue;

        // Make sure the identity of this thread is that of the local process,
        // and keep track of what that identity token actually is.
        Binder.clearCallingIdentity();
        final long ident = Binder.clearCallingIdentity();

        for (;;) {
            Message msg = queue.next(); // might block
            if (msg == null) {
                // No message indicates that the message queue is quitting.
                return;
            }

            // This must be in a local variable, in case a UI event sets the logger
            Printer logging = me.mLogging;
            if (logging != null) {
                logging.println(">>>>> Dispatching to " + msg.target + " " +
                        msg.callback + ": " + msg.what);
            }

            msg.target.dispatchMessage(msg);
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:34:50
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/11635/
本文WWW.DOC100.NET DOC100.NET版权所有。