2

大家好我已經在我的5個應用中實現了GCM我仍然對GCM在後臺運行的應用程序行爲有疑問,可能對應用程序的前景和後臺運行風格有點困惑。當我們的應用程序安裝並註冊了設備ID後,我在應用程序中的「已下載」部分下方列出了我的應用程序,然後按下後退鍵。他們不會在「Running」部分下列出。當有消息(通知)時,他們來到「正在運行」部分,當通知生成並顯示在通知欄中時,他們將從「正在運行」中清除。然而,如果我點擊「下載」部分,我看到一個「強制停止」按鈕被激活(我認爲這對大多數應用程序來說)意味着正在運行。 我的問題是,如果我在我的應用程序中使用GCM,我的應用程序正在運行並佔用手機資源,而沒有任何活動打開? 是否有一個服務在後臺運行,如果是的話,他們爲什麼沒有在「Running」中列出所有其他應用程序?GCM是否在後臺運行

+0

您的應用程序沒有運行谷歌...播放服務正在運行,它只是廣播意向,如果你的應用是否符合意圖過濾 – Selvin

+0

好吧,那麼爲什麼它顯示「強制停止」當我在「下載」部分點擊我的應用程序在應用程序管理器中設置? – Saty

+0

,因爲您的應用程序recive廣播後它必須運行一些代碼...和android系統不會殺死應用程序進程,直到它真的需要 – Selvin

回答

3

強制停止應用程序並不意味着它在您強制停止它之前正在運行。這只是一種讓用戶告訴Android他們不希望應用程序再次啓動的方式,直到用戶再次手動啓動它。

如果您強制停止應用程序,它將無法接收GCM消息,直到用戶再次手動啓動它爲止,因爲GCM後臺服務將無法自動啓動它。

這種行爲是在安卓3.1引入了Launch Controls

啓動控制上停止應用

在Android 3.1開始,系統的軟件包管理器保持的是處於停止狀態的應用程序跟蹤並提供了從後臺進程和其他應用程序控制其啓動的手段。

請注意,應用程序的停止狀態與活動的停止狀態不同。系統分別管理這兩個停止狀態。

該平臺定義了兩個新的intent標誌,讓發件人指定是否允許Intent激活已停止的應用程序中的組件。

FLAG_INCLUDE_STOPPED_PACKAGES - 包括在解決對潛在目標名單停止應用程序的意圖過濾器。

FLAG_EXCLUDE_STOPPED_PACKAGES - 排除從潛在目標名單>停止應用程序的意圖過濾器。

當這些標誌沒有或兩者的意圖被定義,默認的行爲是包括在潛在目標名單停止應用程序的過濾器。

注意,系統將FLAG_EXCLUDE_STOPPED_PACKAGES到所有的廣播意圖。它可以防止來自後臺服務的廣播無意或不必要地啓動停止的應用程序組件。後臺服務或應用程序可以通過添加FLAG_INCLUDE_STOPPED_PACKAGES標誌來覆蓋應該允許激活停止的應用程序的廣播意圖來覆蓋此行爲。

應用程序在首次安裝但尚未啓動以及用戶手動停止時(在「管理應用程序」中)處於停止狀態。

GCM在後臺運行的進程,但它是服務於設備上的所有applkication,所以在安裝使用GCM對運行後臺進程的數量並沒有影響其他應用程式的過程。

1

它就像詢問呼叫應用程序或消息應用程序是否總是繼續運行,等待電話或短信。那麼,有一些名爲BroadCastReceivers的Android框架組件。操作系統在收到呼叫,收到消息,檢測到低電量時,發出警報並且即使收到通知時也會發送意圖消息。

然後我們有各種應用程序被註冊接收一些操作系統觸發的廣播消息。這是在應用程序Manifest(通常)中完成的。因此,如果您的應用註冊爲接收廣播消息,GCM消息,您的應用將收到它。

只需在您的Manifest中刪除GCM的廣播接收器即可。您的應用將不再響應GCM。接下來應用程序如何區分單個設備上的多個GCM接收器? 我的意思是如何區分通知GCM是用於應用A還是應用B?

這與您在GCM中註冊的APP_ID有關。這可以映射到您的應用程序包名稱。我們在註冊GCM時提供軟件包名稱

+0

對不起在中斷之間我不想解釋有關廣播接收器,我知道,我是什麼想知道爲什麼包括我的應用程序在內的幾乎所有應用程序在很久之前離開它們時都有一個「強制停止」按鈕,並且它們也未在「正在運行」中列出。這是否意味着所有應用程序都有背景? – Saty

+0

以開放的心態閱讀答案。我認爲這會清除你的疑問,或者提供更多的意見來澄清你的觀點! :) –