当app force停止时,为什么messenger应用程序会收到消息?

时间:2014-11-02 16:03:39

标签: android android-intent broadcastreceiver google-cloud-messaging

我希望我们无法接收任何消息,当我们强制停止我们的Android设备中的默认信使应用程序。我强制停止默认信使应用程序并发送消息到该Android设备。我收到该设备的消息。为什么这个设备收到消息?

3 个答案:

答案 0 :(得分:4)

在Android 3.1+上,BroadcastReceiver仅在其应用被强制停止后才能使用,如果使用显式Intent向其发送广播。在这里,通过"显式Intent",我指的是包含接收器的ComponentName的那个,以及可能的其他数据,如动作字符串。

目前还不清楚你的意思是"默认的信使应用程序"和"消息"。如果您的意思是短信,我希望在Android 4.4及以上,如果用户的默认短信客户端被强制停止,它仍然会收到短信,因为Android可能会使用明确的Intent与之通话它。但是,在Android 4.3及更低版本中,我不希望强制停止的SMS客户端接收消息,因为SMS_RECEIVED只是普通的有序广播。

答案 1 :(得分:1)

这种情况经常发生,因为有一项服务正在倾听。该应用使用该服务与Google Cloud Messaging连接并接收消息。您需要禁用该服务。您可以查看设置 - >应用,然后向左滑动以查看全部或正在运行并查看服务。

答案 2 :(得分:1)

进一步扩展史蒂夫的回答,这可能是一个典型案例,描述了程序员必须控制其应用程序中的任何Service的原因。许多人只是声明并运行它们,然后他们忘记了它们。 Service运行在与前台应用不同的组件中,因此,如果您关闭'你的应用程序,但你不能停止Service,它仍将继续运行,这可能是你正在经历的。但是,很多人倾向于误解这个概念。这是一个不同的组件,但不同的线程或不同的进程。

根据官方Android Developer Guide

  

服务在其托管进程的主线程中运行 - 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定)。这意味着,如果您的服务要进行任何CPU密集型工作或阻止操作(例如MP3播放或网络),您应该在服务中创建一个新线程来完成这项工作。 [...]

您没有指定哪种消息系统使用您的应用,但如果是GCM(Google云消息传递)或类似的系统,它确实使用后台Service来接收来自中央服务器的通知,您已获得这些通知,因为您的前台应用已关闭,但您的Service仍在运行。

要停止Service,您需要按照documentation中的定义调​​用Context的{​​{1}}方法,然后再停止前景应用。