Handler2

来源:互联网 发布:java怎么求质数 编辑:程序博客网 时间:2024/06/09 19:05

Looper循环只有在主线程中存在,MessageQueue在looper里,Activity里的onCreate(),和其他一些方法都在Looper里执行。
Handler 构造方法,可以穿looper ,如果有looper构造方法的 looper 赋值的是当前looper,如果没有looper.myLooper()得到looper。 myLooper 通过 sThreadLocal.get()得到当前线程的looper对象。通过Prepare方法将looper放入sThreadLocal

looper里方法loop里有个死循环,里面取messagequeue里的值。得到message,执行handler的dispatchMessage()方法。 最后message 重新放入msg池中

dispatchMessage()方法。先执行msg的callback接口里的方法。如果为空执行自己写的handler里的callback接口里的handlerMessage里对msg的处理方法。如果为空执行,执行一个空的handlerMessage方法。

子线程中执行,handler的dispatchMessage 方法里显示如果有接口执行自己接口里的run方法,而不执行handler里的handlerMessage方法。因为消息发送后最后是在主线程中执行,所以可以对UI操作。
如果后期要添加对ui操作,可以写子线程中这样写

方法1

 Message message = Message.obtain(handler, new Runnable() {                        @Override                        public void run() {                            textView.setText("ss");                        }                    });         handler.sendMessage(message); //发送消息

方法2

  handler.post(new Runnable() {                        @Override                        public void run() {                        }                    });

方法3

  runOnUiThread(new Runnable() {                        @Override                        public void run() {                        }                    });
0 0
原创粉丝点击