解惑Android的post()方法究竟執行在哪個執行緒中
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方法
/**
* Causes the Runnable to be added to the message queue.
* The runnable will be run on the user interface thread.
*
* @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);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3137/viewspace-2799819/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android新執行緒中更新主執行緒UI中的View方法彙總Android執行緒UIView
- Android的執行緒和執行緒池Android執行緒
- Android 執行緒優化之執行緒池shutdown方法Android執行緒優化
- 多執行緒(五)---執行緒的Yield方法執行緒
- Android中的執行緒池Android執行緒
- Android中執行緒的使用Android執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- Android《多執行緒-中》Android執行緒
- Java執行緒:執行緒中斷Java執行緒
- java執行緒執行緒休眠,sleep方法Java執行緒
- Android中UI執行緒與後臺執行緒互動設計的5種方法AndroidUI執行緒
- Android多執行緒之執行緒池Android執行緒
- Java執行緒中斷與終止執行緒執行Java執行緒
- Thread 中的 join() 方法的作用是呼叫執行緒等待該執行緒執行完後,再繼續執行thread執行緒
- Android中的執行緒通訊Android執行緒
- Android JNI 中的執行緒操作Android執行緒
- C#中的執行緒(三)多執行緒C#執行緒
- Android程式框架:執行緒與執行緒池Android框架執行緒
- Android執行緒篇(二)Java執行緒池Android執行緒Java
- Android執行緒管理之ExecutorService執行緒池Android執行緒
- 【Java面試】如何中斷一個正在執行的執行緒?Java面試執行緒
- Android執行緒篇(一)實現執行緒的幾種方法及區別Android執行緒
- Android 判斷當前執行緒是否是主執行緒的兩種方法Android執行緒
- 多執行緒核心技術(1)-執行緒的基本方法執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- android程式與執行緒詳解二:執行緒Android執行緒
- Java中命名執行器服務執行緒和執行緒池Java執行緒
- JVM程式用一個主執行緒來執行main()方法JVM執行緒AI
- 執行緒同步方法執行緒
- Android中的多程式、多執行緒Android執行緒
- 掌握Android中的程式和執行緒Android執行緒
- 走進Java Android 的執行緒世界(二)執行緒池JavaAndroid執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒
- 淺談執行緒池(中):獨立執行緒池的作用及IO執行緒池執行緒