Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> ActivityThread and ApplicationThread

ActivityThread and ApplicationThread

編輯:關於Android編程

D:linuxlinuxkernelsrccm10.1 rameworksasecorejavaandroidappActivityThread.java

/**
* This manages the execution of the main thread in an
* application process, scheduling and executing activities,
* broadcasts, and other operations on it as the activity
* manager requests.
*
* {@hide}
*/
public final class ActivityThread {

 

 

http://www.devdiv.com/forum.php?mod=viewthread&tid=38129

 

主線程中會構造這兩個類的對象。
但是他們不是線程,你看看繼承關系就可以知道ApplicationThread是binder, ActivityThread是一個final類也不是真正的線程。
如果你用ddms查看某一個進程的所有線程,你會發現它只有一個main thread,當然它可能還有binder thread, jdwp, signal catcher等。

 

一個應用程序對應一個ActivityThread實例,應用程序由activityThread打開消息循環, 同時,一個應用程序也對應一個ApplicationThread對象,此對象是ActivityThread 與 ActivityManagerService連接的橋梁

應該不是一個應用程序對應一個ActivityThread實例,而是一個進程對應一個ActivityThread實例,這個進程裡面所有的activity對應這一個ActivityThread實例,你可以看看ActivityThread類包含了mActivities。

 

 

 

Step 3. Activity.startActivityForResult

這個函數也是實現在frameworks/base/core/java/android/app/Activity.java文件中:

[java]  
  1. public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory,
  2. Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks {
  3. ......
  4. public void startActivityForResult(Intent intent, int requestCode) {
  5. if (mParent == null) { Instrumentation.ActivityResult ar =
  6. mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this,
  7. intent, requestCode); ......
  8. } else { ......
  9. }
  10. ......
  11. } 這裡的mInstrumentation是Activity類的成員變量,它的類型是Intrumentation,定義在frameworks/base/core/java/android/app/Instrumentation.java文件中,它用來監控應用程序和系統的交互。

    這裡的mMainThread也是Activity類的成員變量,它的類型是ActivityThread,它代表的是應用程序的主線程,我們在Android系統在新進程中啟動自定義服務過程(startService)的原理分析一文中已經介紹過了。這裡通過mMainThread.getApplicationThread獲得它裡面的ApplicationThread成員變量,它是一個Binder對象,後面我們會看到,ActivityManagerService會使用它來和ActivityThread來進行進程間通信。這裡我們需注意的是,這裡的mMainThread代表的是Launcher應用程序運行的進程。

    這裡的mToken也是Activity類的成員變量,它是一個Binder對象的遠程接口。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved