我希望我们无法接收任何消息,当我们强制停止我们的Android设备中的默认信使应用程序。我强制停止默认信使应用程序并发送消息到该Android设备。我收到该设备的消息。为什么这个设备收到消息?
答案 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
,它仍将继续运行,这可能是你正在经历的。但是,很多人倾向于误解这个概念。这是一个不同的组件,但不不同的线程或不同的进程。
服务在其托管进程的主线程中运行 - 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定)。这意味着,如果您的服务要进行任何CPU密集型工作或阻止操作(例如MP3播放或网络),您应该在服务中创建一个新线程来完成这项工作。 [...]
您没有指定哪种消息系统使用您的应用,但如果是GCM
(Google云消息传递)或类似的系统,它确实使用后台Service
来接收来自中央服务器的通知,您已获得这些通知,因为您的前台应用已关闭,但您的Service
仍在运行。
要停止Service
,您需要按照documentation中的定义调用Context
的{{1}}方法,然后再停止前景应用。