永远不要从广播接收者开始活动?

时间:2014-06-04 09:03:23

标签: android android-activity broadcastreceiver

初学者在android中,所以请耐心等待...

根据文档,您不应该从广播接收器开始活动:

"(...)永远不要启动活动以响应传入的广播意图。"

http://developer.android.com/training/run-background-service/report-status.html

(文档的最后一行)。

所以,这是我的问题:因为我需要从后台服务中显示活动选择器,因为我不应该从广播接收器开始活动,那么我该如何解决我的问题?

1 个答案:

答案 0 :(得分:2)

您的确切情况需要进一步澄清。究竟你想做什么?

与此同时,以下是背景说明,可帮助您了解此规则何时适用,以及是否应在应用中将其分解。


  

“(...)永远不要启动活动以响应传入的广播   意图“。

这与通过使用通知栏向用户提供Notification的想法有关。我们的想法是,您不应该打断用户当时正在尝试做的事情。

Android认识到用户随时知道他们想要做什么,并且操作系统无权中断用户。这与使用弹出窗口提醒用户传入事件的其他系统形成鲜明对比。


因此,您的引言背后的想法是,您不应该通过在其上启动您自己的活动,将用户的注意力从他当前的活动中拉出来。

这可能很糟糕,想象你正处于游戏中,突然路易斯的活动显示在游戏面前。


但是,规则有例外

1

如果用户已在使用您的应用,并且您收到了Intent,那么您的BroadcastReceiver应该会启动您自己的活动。

当用户未使用您的应用时,请改为发布Notification

您可以在 Whatsapp 等应用中看到此类行为。如果您在应用程序中,则不会收到通知,而应用程序只会显示新消息。如果您不在应用程序中,则会收到通知。

2

有时开始这样的活动是预期的行为,这是有意义的

一个明显的例子是手机应用程序。它必须在电话响起时启动,我们已经接受了。

这是从接收者开始活动的另一个合法用例。它是一个时钟应用程序,设计用于在手机充电时启动