2011-9-27 22:02:12

 


2011-9-27 22:02:12

        在Step 1中,我們看到,Launcher繼承於Activity類,而Activity類實現了startActivity函數,因此,這裏就調用了Activity.startActivity函數,
       
        它實現在frameworks/base/core/java/android/app/Activity.java文件中:


public class Activity extends ContextThemeWrapper
  implements LayoutInflater.Factory,
  Window.Callback, KeyEvent.Callback,
  OnCreateContextMenuListener, ComponentCallbacks {

 ......

 @Override
 public void startActivity(Intent intent) {
  startActivityForResult(intent, -1);
 }

 ......

}        這個函數實現很簡單,它調用startActivityForResult來進一步處理,第二個參數傳入-1表示不需要這個Actvity結束後的返回結果。

        Step 3. Activity.startActivityForResult

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


public class Activity extends ContextThemeWrapper
  implements LayoutInflater.Factory,
  Window.Callback, KeyEvent.Callback,
  OnCreateContextMenuListener, ComponentCallbacks {

 ......

 public void startActivityForResult(Intent intent, int requestCode) {
  if (mParent == null) {
   Instrumentation.ActivityResult ar =
    mInstrumentation.execStartActivity(
    this, mMainThread.getApplicationThread(), mToken, this,
    intent, requestCode);
   ......
  } else {
   ......
  }


 ......

}       
這裏的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對象的遠程接口。
        
        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章