由於android平臺相對較新,我被賦予了實現電子郵件客戶端的任務。爲此,我希望使用一種在後臺運行的服務(客戶端應儘快在服務器獲得它們時接收電子郵件,這是客戶的要求)。Android郵件客戶端,遠程過程與否
現在我已經看了到服務的android系統,但似乎無法找到對服務是否應該是本地或遠程的任何好的答案。
將主要優勢/劣勢是什麼跟選擇一個比其他?請記住服務必須始終運行。我知道我知道。壞。但它對於應用程序的核心功能至關重要。
由於android平臺相對較新,我被賦予了實現電子郵件客戶端的任務。爲此,我希望使用一種在後臺運行的服務(客戶端應儘快在服務器獲得它們時接收電子郵件,這是客戶的要求)。Android郵件客戶端,遠程過程與否
現在我已經看了到服務的android系統,但似乎無法找到對服務是否應該是本地或遠程的任何好的答案。
將主要優勢/劣勢是什麼跟選擇一個比其他?請記住服務必須始終運行。我知道我知道。壞。但它對於應用程序的核心功能至關重要。
通常我不知道爲什麼你可以使用另一個進程。如果您願意 - 您將必須處理進程間通信,包括所有這些AIDL,包裹等。
如果您將保持相同的過程 - 在您的組件之間傳輸數據將更容易。
的唯一理由讓幾個過程,我認爲是要儘量避免的Android堆的預算限制。您可以嘗試在流程之間移動重物,並嘗試將您的限制翻倍。不過,我認爲你不需要這個,也是不好的方法。
所以我會建議不要使用過程中發揮並讓事情儘可能的簡單。
好運
首先,正確/有效的方式從這樣在Android上的遠程服務器做即時通知是使用Google Cloud Messaging。 GCM允許您通過將Intent發送到應用程序來遠程喚醒設備,然後您可以使用它作爲從服務器獲取消息,向狀態欄發送通知等的信號。
做什麼,重新描述永久運行的服務將會對電池壽命產生重大影響,除非您將一切都完全正確。保持手機始終保持清醒並不是一個可行的選擇。使用GCM,不要爲此推出自己的解決方案。
但你的問題是更普遍的關於是否在一個單獨的進程中運行一個服務,一般簡單的是在同一個進程中運行的,而且在這種情況下,簡單的手段。您可以在內存中訪問應用程序進程的所有各種元素,並且一般情況下您可能會有更容易的時間。你的活動全部發生在同一主線的Looper上。一切都會更直接。
如果您還沒有一個很好的理由使用一個單獨的進程爲您服務,您應該在同一個進程中運行它。
「記住服務必須始終運行」 - 不,它不能。對於初學者來說,它將*不會「隨時運行」,因爲用戶和操作系統可以隨時從內存中刪除您的應用程序,出於任何原因。假定「服務必須始終運行」的任何設計都是有缺陷的。 – CommonsWare
我知道我不能認爲服務在任何時候都在運行。但由於應用程序運行的環境/環境,郵件在儘可能短的時間內到達手機至關重要。我現在還沒有弄清楚,如果它在接收到Intent時喚醒服務,GCM似乎是一個可行的選擇。其他選項只是「確保服務正在運行」。所有關於物質的投入都將不勝感激。 – atomman