android中我们常用的post(new Runnable(){//...})有两种。
(1)view的post方法,运行在UI线程中,也就是主线程中。
(2)handler里面的方法运行在handler依附的线程中,可能是主线程,也可能是其他线程。
下面是Handler里面的post方法:
这个是View里面的post方法:
所以大家要注意post方法如果是handler的,则Runnable执行在handler依附线程中。
如果是View的post方法,则一定是运行在主线程中的。
(1)view的post方法,运行在UI线程中,也就是主线程中。
(2)handler里面的方法运行在handler依附的线程中,可能是主线程,也可能是其他线程。
下面是Handler里面的post方法:
/**
* Causes the Runnable r to be added to the message queue.
* The runnable will be run on the thread to which this handler is
* attached.
*
* @param r The Runnable that will be executed.
*
* @return Returns true if the Runnable was successfully placed in to the
* message queue. Returns false on failure, usually because the
* looper processing the message queue is exiting.
*/
public final boolean post(Runnable r)
{
return sendMessageDelayed(getPostMessage(r), 0);
}
这个是View里面的post方法:
[/**
* <p>Causes the Runnable to be added to the message queue.
* The runnable will be run on the user interface thread.</p>
*
* @param action The Runnable that will be executed.
*
* @return Returns true if the Runnable was successfully placed in to the
* message queue. Returns false on failure, usually because the
* looper processing the message queue is exiting.
*
* @see #postDelayed
* @see #removeCallbacks
*/
public boolean post(Runnable action) {
final AttachInfo attachInfo = mAttachInfo;
if (attachInfo != null) {
return attachInfo.mHandler.post(action);
}
// Assume that post will succeed later
ViewRootImpl.getRunQueue().post(action);
return true;
}
所以大家要注意post方法如果是handler的,则Runnable执行在handler依附线程中。
如果是View的post方法,则一定是运行在主线程中的。