2012-09-03 22 views
0

由於android平臺相對較新,我被賦予了實現電子郵件客戶端的任務。爲此,我希望使用一種在後臺運行的服務(客戶端應儘快在服務器獲得它們時接收電子郵件,這是客戶的要求)。Android郵件客戶端,遠程過程與否

現在我已經看了到服務的android系統,但似乎無法找到對服務是否應該是本地或遠程的任何好的答案。

將主要優勢/劣勢是什麼跟選擇一個比其他?請記住服務必​​須始終運行。我知道我知道。壞。但它對於應用程序的核心功能至關重要。

+1

「記住服務必​​須始終運行」 - 不,它不能。對於初學者來說,它將*不會「隨時運行」,因爲用戶和操作系統可以隨時從內存中刪除您的應用程序,出於任何原因。假定「服務必須始終運行」的任何設計都是有缺陷的。 – CommonsWare

+0

我知道我不能認爲服務在任何時候都在運行。但由於應用程序運行的環境/環境,郵件在儘可能短的時間內到達手機至關重要。我現在還沒有弄清楚,如果它在接收到Intent時喚醒服務,GCM似乎是一個可行的選擇。其他選項只是「確保服務正在運行」。所有關於物質的投入都將不勝感激。 – atomman

回答

0

通常我不知道爲什麼你可以使用另一個進程。如果您願意 - 您將必須處理進程間通信,包括所有這些AIDL,包裹等。

如果您將保持相同的過程 - 在您的組件之間傳輸數據將更容易。

的唯一理由讓幾個過程,我認爲是要儘量避免的Android堆的預算限制。您可以嘗試在流程之間移動重物,並嘗試將您的限制翻倍。不過,我認爲你不需要這個,也是不好的方法。

所以我會建議不要使用過程中發揮並讓事情儘可能的簡單。

好運

2

首先,正確/有效的方式從這樣在Android上的遠程服務器做即時通知是使用Google Cloud Messaging。 GCM允許您通過將Intent發送到應用程序來遠程喚醒設備,然後您可以使用它作爲從服務器獲取消息,向狀態欄發送通知等的信號。

做什麼,重新描述永久運行的服務將會對電池壽命產生重大影響,除非您將一切都完全正確。保持手機始終保持清醒並不是一個可行的選擇。使用GCM,不要爲此推出自己的解決方案。

但你的問題是更普遍的關於是否在一個單獨的進程中運行一個服務,一般簡單的是在同一個進程中運行的,而且在這種情況下,簡單的手段。您可以在內存中訪問應用程序進程的所有各種元素,並且一般情況下您可能會有更容易的時間。你的活動全部發生在同一主線的Looper上。一切都會更直接。

如果您還沒有一個很好的理由使用一個單獨的進程爲您服務,您應該在同一個進程中運行它。

+0

謝謝,我一定會考慮GCM。只是一個簡單的問題,但。鑑於CommonWares對原始帖子的評論,該服務可能無法一直運行。如果情況並非如此,GCM是否會啓動IntentService? – atomman

+0

謝謝,我一定會考慮使用GCM的可能性。 – atomman

+0

是的,您的相關應用程序組件將按照從任何其他來源收到意向的方式啓動。 – adamp