2014-01-16 145 views
7

我想弄清楚作爲我的客戶端應用程序(使用android:process =「:remote」)的一部分編寫Android遠程服務的優缺點,一個單獨的服務應用。Android應用程序內的遠程服務與獨立應用程序

在這兩種情況下,服務都會在自己的獨立進程中運行,並擁有自己的堆等。但是,當我們將它作爲一個獨立的應用程序時,必定會有一些差異,因爲它將擁有自己的應用程序沙箱。我發現了很多他們的使用情況和首選方法的例子,但我試圖瞭解它的內部技術細節。

有關此信息的任何良好來源?

編輯: 如果服務和客戶端進程在同一應用程序中運行,會對應用程序對象/上下文產生什麼影響?它會被其中一個進程覆蓋嗎?或者每個進程都會有兩個應用程序對象,這對於一個應用程序來說聽起來不正確。

+0

部署是使用兩個進程保持一個應用程序的最大好處之一。如果部署到應用商店,我不會以任何其他方式進行。爲什麼你需要遠程服務? –

+0

@Mikedg是的,部署是您希望將這兩個進程保存在一個應用中的原因之一,但這不是爲什麼我需要遠程vs本地服務,而是試圖瞭解整體內部行爲,正如我在低於迴應的評論。 – pree

+0

編輯我的問題以及。 – pree

回答

6

您的問題已被部分回答。請點擊這裏:

但如果你仍然想爲在後臺運行的東西的想法,你可以在此引用一下:

讓東西在背景上運行顯然不是一個好的選擇。除非你出於任何原因真的需要它。因此,請注意不要讓用戶感到不自覺地由用戶自己的意願激活的不必要的後臺服務。在這種情況下,製作一個單獨的應用程序或某種由用戶激活的功能是更智能和更安全的方法。

如果您需要能夠編寫一個可以在remote processes中執行與客戶端的複雜通信的服務(不僅僅是使用Context.startService向其發送命令),那麼您可以使用Messenger類而不是寫入完整AIDL文件。如果您只需要遠程服務,則應遵循此tutorial

+0

因此,如果應用程序具有遠程服務,則應用程序啓動時以及服務啓動時將創建應用程序對象,它重新創建應用程序對象?是這樣的,我們有一個Dalvik虛擬機運行一個應用程序,它具有兩個進程和一個應用程序對象,這些對象可以根據進程的啓動隨時間變化,對嗎?是不是很奇怪和意外,因爲我們最初開始遠程服務從使用應用程序對象的活動(getApplicationObject()。startService())。如果應用程序對象被覆蓋,是不是會混淆整個應用程序環境? – pree

+0

@pree我剛更新了我的答案,請檢查它 – Avanz

+0

我已經看過那個鏈接,並且使用本地/遠程所有類型的服務。我試圖理解的是Context/application對象在遠程服務的情況下作爲客戶端應用程序本身的一部分的行爲,正如我剛剛解釋過的。 – pree