Handler类中的post方法是用于将一个Runnable对象提交到消息队列中执行的。它有两种重载形式: boolean post(Runnable r):将一个Runnable对象提交到消息队列中执行,并返回是否成功添加到消息队列中。 boolean postDelayed(Runnable r, long delayMillis):将一个Runnable对象提交到消息队列中执行,并延迟指定的时间后执行。 下...
handler的post(Runnable)方法,在Runnable的run方法体中,执行的操作是在主线程(UI线程)中进行的,所以可以通过这个方法在子线程中更新主线程的UI。 二、handler的post(Runnable)源码初探 Handler.java public final boolean post(@NonNull Runnable r) { return sendMessageDelayed(getPostMessage(r), 0); } public f...
message.callback.run(); 就是直接调用的Runnable的run方法,并不是strat(),所以仅仅是当做一个有run()的普通类使用而已,并不是开启了一个新的线程 看下源码就很清楚了,view.post(Runnable)内部实际还是使用的handler.post(Runnable),而这个方法,内部会执行下面的方法,从而把Runnable设置为Message.callback,实际上...
handler的post(Runnable)方法,在Runnable的run方法体中,执行的操作是在主线程(UI线程)中进行的,所以可以通过这个方法在子线程中更新主线程的UI。 二、handler的post(Runnable)源码初探 Handler.java publicfinalbooleanpost(@NonNullRunnable r){returnsendMessageDelayed(getPostMessage(r),0); }publicfinalbooleansendMe...
handler.post(runnable)的方式的思考mHandler1.post(new Runnable() { @Override public void run() { //如果这个run方法是死循环,那么,handler2post的线程就不会被执行了 try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); textView.setText("handler1"); } } }); ...
主要分析runnable 是如何被封装成为一个message,以及它如何被添加到messageQueue里面的过程,最后再分析这个message如何运行的过程。 Runnable分发 首先我们看一下handler.post(Runnable)的相关源码 public final boolean post(@NonNull Runnable r) { return sendMessageDelayed(getPostMessage(r), 0); } private sta...
简介:工作中经常会遇到从子线程发送消息给主线程,让主线程更新UI的操作,常见的有handler.sendMessage(Message),和handler.post(runnable)和handler.postDelayed(runnable, milliseconds);一直在使用这些方法,却不知道他们的原理,今天就来解释一下他们的原理。
至此完成了在子线程的耗时操作完成后在主线程异步更新UI,可是并没有用上标题的post,我们再来看post的版本: private Handler mHandler;//全局变量 @Override protected void onCreate(Bundle savedInstanceState) { mHandler = new Handler(); new Thread(new Runnable() { ...
Handler的post(Runnable)方法的原理涉及到消息队列(Message Queue)和消息循环(Message Loop)的概念。 1 •消息队列:Handler使用消息队列来存储即将在未来某一时刻执行的任务。每个消息都是一个封装了Runnable对象的消息对象。 •消息循环:Handler的工作原理依赖于消息循环,也称为消息泵(Message Pump)。消息循环不断地...
好了,我们再来看post(): publicfinalbooleanpost(Runnabler){returnsendMessageDelayed(getPostMessage(r),0);//getPostMessage方法是两种发送消息的不同之处} 方法只有一句,内部实现和普通的sendMessage是一样的,但是只有一点不同,那就是getPostMessage(r)这个方法: ...