Android中我们常用的post()方法大致有两种情况:
1.如果post方法是handler的,则Runnable执行在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);
}
2.如果post方法是View的,则一定是运行在主线程中的,因为所有view都自带一个handler,所有handler都有post方法,所以它的Runnable是运行在主线程中的
下面是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;
}
例如:Imageview自带一个handler,它有postDelayed方法,由于imageview是主线程上的,所以Runable是运行在主线程中的代码。
imageview.postDelayed(new Runnable() {
@Override
public void run() {
Intent mIntent = new Intent(MainActivity.this,
SecondActivity.class);
startActivity(mIntent);
finish();
}
}, 2000);
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦