2016-01-08 98 views
2

我想知道是否Dalvik實例是分叉每個應用程序或每個進程,也就是說,如果我有一個具有多個進程的應用程序我也有多個Dalvik實例?實際上多處理過程是如何發生的?Dalvik/JVM如何處理多處理的應用程序

讓我描述一個簡單的場景:

我開始這將啓動運行在第一個流程中的活動的應用程序,然後我點擊一個按鈕,它產卵開始在不同的進程中運行的另一個活動。

因此,當我點擊一個按鈕是另一個Dalvik被分叉的實例,並且被新實例化的Dalvik解釋的字節代碼?如果它是真的,過程切換如何發生。假設我回到第一個活動,運行時如何確定現在第一個Dalvik應該解釋字節碼?

+6

「如果我有多個進程的應用程序也有多個Dalvik實例?」 - 是的。 「我想要一個非常詳細的答案......」 - 你想要的遠遠超出Stack Overflow答案的範圍。在[Android內幕]上購買一本書(http://shop.oreilly.com/product/0636920021094.do)。 – CommonsWare

+1

隨着編輯你的問題屬於「推薦某些東西」關閉類別,這不會幫助你重新打開問題。請儘量詳細說明您的問題。 – Cristik

+1

(經過更多編輯...)Linux內核負責執行調度和其他進程管理。 Dalvik VM的單個實例不跨越進程。 – fadden

回答

0

活動不是過程。一個進程/應用程序可以有許多Activity實例,每個實例都基本上只是Java對象。因此,單擊一個啓動新活動的按鈕,與創建新實例相比,更類似於啓動新過程。

當它發生時,進程切換在操作系統級別處理,就像任何其他基於Unix的操作系統一樣。進程正在同時運行,並且在操作系統認爲合適的時候在處理器上給予更多或更少的時間。

這可能會有幫助,通過Managing the Activity LifecycleBest Practices for Background Jobs培訓,這將給你更多的背景。

相關問題