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中定义)。

相关问题