Android 如果应用程序位于前台,则为备用操作设计模式?
我正在构建一个action,它利用Google云消息来接收推送通知 这涉及到几个值得注意的组成部分,即:Android 如果应用程序位于前台,则为备用操作设计模式?,android,intentservice,Android,Intentservice,我正在构建一个action,它利用Google云消息来接收推送通知 这涉及到几个值得注意的组成部分,即: 从GCM接收消息的接收器 当收到GCM事件时通知的IntentService 正如我确信的那样,对于许多应用程序,当应用程序在前台有活动时,与应用程序在前台没有应用程序时,我希望采用不同的方法 如果应用程序未处于活动状态,我想向通知抽屉发送通知,如果应用程序处于活动状态,只需将事件转发到前台活动 这个有设计模式吗?我应该如何确定应用程序是在前台还是在后台?我建议这样做的方式如下 在服务中
- 从GCM接收消息的
接收器
- 当收到GCM事件时通知的
IntentService
这个有设计模式吗?我应该如何确定应用程序是在前台还是在后台?我建议这样做的方式如下 在服务中具有与GCM相关的所有逻辑(我从未使用过
IntentService
,因此我不知道它的勇气,但我看到它继承自服务
)
在您的活动中,您可能有启动服务的方法(可能用户通过按钮激活),这里没有什么新的内容
有趣的部分来了。在活动中,您处理onPause()
和onResume()
。在onResume()
中,您将绑定到服务。使用绑定机制,您可以获取指向服务的指针,并让它知道您在“嘿,服务,我是一个活动,我在这里……请将指向我自己的指针存储在某个地方”,服务将存储指向活动的指针(我们称之为mActivity
)。在您的onPause()
中,您通知服务您要离开,因此服务设置mActivity=null
,然后您从服务中解除绑定
使用此机制,每次服务收到推送通知时,它都会测试
mActivity
变量,以查看是否存在绑定活动。通过指向活动的指针,您可以调用它的任何方法、转发信息 您可以遵循中所述的方法,在活动中创建一个具有正优先级(即高于默认值0
)的广播接收器,该接收器拦截特定操作,然后调用中止广播
——这将处理应用程序打开的情况。然后,您还可以在清单中注册一个BroadcastReceiver
,该清单处理相同的操作,但优先级为默认优先级-如果应用程序未打开并创建系统通知,则这是回退
然后使用sendOrderedBroadcast()
将广播按优先级顺序发送给所有注册的接收器。如果活动已打开,则第一个将处理它。否则,它将默认为另一个并创建通知。根据Android提供的功能,这是一个非常好的解决方案,似乎是最简单的方法。