国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > 解惑Android的post()方法究竟运行在哪个线程中

解惑Android的post()方法究竟运行在哪个线程中

来源:程序员人生   发布时间:2016-06-30 13:21:36 阅读次数:2445次

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的,则1定是运行在主线程中的,由于所有view都自带1个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自带1个handler,它有postDelayed方法,由于imageview是主线程上的,所以Runable是运行在主线程中的代码。

imageview.postDelayed(new Runnable() { @Override public void run() { Intent mIntent = new Intent(MainActivity.this, SecondActivity.class); startActivity(mIntent); finish(); } }, 2000);
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生