2011-9-27 21:37:27

 

2011-9-27 21:37:27

  從這個函數可以看出,決定一個Activity是在新的進程中啓動還是在原有的進程中啓動的因素有兩個,一個是看這個Activity的process屬性的值,
 
  另一個是這個Activity所在的應用程序的uid。應用程序的UID是由系統分配的,
 
  而Activity的process屬性值,如前所述,是可以在AndroidManifest.xml文件中進行配置的,
 
  如果沒有配置,它默認就爲application標籤的process屬性值,
 
  如果application標籤的process屬性值也沒有配置,那麼,它們就默認爲應用程序的package名。
 
  這裏就是根據processName和uid在系統查找是否已有相應的進程存在,如果已經有了,就會調用realStartActivityLocked來直接啓動Activity,
 
  否則的話,就要通過調用ActivityManagerService.startProcessLocked函數來創建一個新的進程,
 
  然後在新進程中啓動這個Activity了。對於前者,可以參考Android應用程序內部啓動Activity過程(startActivity)的源代碼分析一文,
  而後者,可以參考Android應用程序啓動過程源代碼分析一文。

        至此,Android應用程序在新的進程中啓動新的Activity的方法和過程分析就結束了。
       
        在實際開發中,一個應用程序一般很少會在一個新的進程中啓動另外一個Activity,如果真的需要這樣做,
       
        還要考慮如何與應用程序中其它進程的Activity進行通信,這時候不妨考慮使用Binder進程間通信機制。寫這篇文章的目的
        更多是讓我們去了解Android應用程序的架構,這種架構可以使得應用程序組件以松耦合的方式組合在一起,便於後續的擴展和維護,這是非常值得我們學習的。
       
        uid 和屬性值
       
       


 

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