4

我希望我們不能收到任何消息,當我們強制停止我們的Android設備中的默認信使應用程序。我強制停止默認信使應用程序併發送消息到該Android設備。我收到該設備的消息。爲什麼此設備收到消息?爲什麼Messenger應用程序在應用程序停止時接收消息?

+0

爲什麼默認的Messenger應用程序在設置強制停止後收到消息。 brodcastreceiver會在app force停止後工作嗎? – 2014-11-18 13:29:00

回答

4

在Android 3.1+上,如果使用明確的Intent發送廣播,BroadcastReceiver將僅在其應用程序被強制停止後才起作用。在這裏,通過「明確的Intent」,我的意思是包含接收器的ComponentName,除了可能的其他數據,如動作字符串。

目前還不清楚「默認信使應用程序」和「消息」的含義。如果你的意思是短信,我預計在Android 4.4+上,如果用戶的默認短信客戶端被強制停止,它仍然會收到短信,因爲Android可能會使用明確的Intent與之通話。但是,在Android 4.3及更低版本中,我不希望強制停止的SMS客戶端接收消息,因爲SMS_RECEIVED只是一個普通的有序廣播。

+0

,我的意思是我們的android設備中的短信應用程序。 – 2014-11-21 11:38:01

1

這經常發生,因爲有一個服務正在監聽。該應用使用該服務連接Google Cloud Messaging並接收消息。您需要禁用該服務。您可以查看設置 - >應用程序,然後向左滑動以查看全部或正在運行並查看服務。

1

延伸史蒂夫的答案進一步,這可能是一個示例性案例,描述爲什麼程序員必須控制他們的應用程序中的任何Service s。許多人只是宣佈並運行它們,然後他們就忘記了它們。 Service運行在與前臺應用程序不同的組件中,因此如果您關閉了應用程序,但不停止Service,它仍將繼續運行,這可能就是您正在經歷的。但是,很多人往往誤解了這個概念。這是一個不同的組件,但不是不同的線程或不同的過程。

按照官方Android Developer Guide

服務在其宿主進程,該服務不會創建自己的線程的主線程中運行,在單獨的進程不運行(除非另有說明) 。這意味着,如果您的服務將執行任何CPU密集型工作或阻止操作(如MP3播放或網絡連接),則應在服務中創建一個新線程來完成此項工作。 [...]

您沒有指定什麼樣的信息系統的使用你的應用程序,但如果是GCM(谷歌雲通訊)或一些相似的系統,它的確採用了背景Service再收到通知中央服務器,你得到他們,因爲你的前臺應用程序已關閉,但你的Service仍在運行。

要停止Service,您需要在停止前臺應用程序之前調用ContextstopService()方法(在documentation中定義)。

相關問題