首页 > 解决方案 > 长时间不活动后打开推送消息

问题描述

我有一个使用推送的 android 应用程序。如果应用程序从服务器接收到推送消息,它会创建一个推送通知(带有标题、消息、图标)并将其呈现给用户。

正常情况 单击通知会打开一个活动(不是启动器),活动会打开一个片段,该片段显示基于通知的内容。这里没有魔法,一切都按预期工作。

特殊/坏情况 如果设备至少 2 小时处于非活动状态并且您拿起它并单击之前推送的通知,那么它会像正常情况一样打开 Activity 但没有片段出现。相反,将调用启动器。

虽然调试这既费时又令人沮丧,但我发现了以下几点。也许有人有一个想法:

问题:长时间不活动后似乎破坏了我的代码中的函数的疯狂状态是什么?

设备:我目前正在使用带有 Android 6.0.1 的 Nexus 5 进行测试

标签: androidandroid-fragmentspush-notificationandroid-dozeandroid-doze-and-standby

解决方案


我发现如果我的设备处于这种疯狂的睡眠状态,那么如果我点击推送通知,我的活动就会启动两次。首先,推送触发了带有意图中数据的活动。然后,在它之后,启动器活动被调用(具有空意图)并启动主屏幕。

我在这里修复了它-> Activity 打开了两次

把它们加起来:

1) 我更改了我的代码,以便我的所有深层链接、推送通知等都将调用 lauchner 活动。然后活动决定做什么。这意味着我们有一个进入应用程序的入口点。这使一切变得简单,代码更清晰。(通过此修复,相同的活动将被调用两次。我们必须做更多的工作来修复它)

2)我在清单中标记了活动android:launchMode="singleTask"。这意味着如果已经有一个活动的实例,它将被重用而不是第二次创建。

3) 2) 中的标志触发回调方法。系统不会再次调用活动,而是重用已经运行的活动并调用方法onNewIntent(intent)。这意味着如果活动是新开始的,那么onCreate()将被调用。如果活动被重用(因为它是由推送通知、深度链接等触发的),那么onNewIntent(intent)将被调用。在两者中,onCreate()onNewIntent()调用一个方法来决定接下来是什么屏幕/片段/活动,并从getIntent(). 完毕。


推荐阅读