长时间不活动后打开推送消息

Open Push Message after long inactivity

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

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

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

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

问题: 在 activity?

中更长的时间后似乎会破坏我的代码中的功能是什么疯狂状态?

设备: 我目前正在使用 Android 6.0.1

的 Nexus 5 进行测试

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

我像这里一样修复它 -> Activity opened twice

总结一下:

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

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

3) 2) 中的标志触发回调方法。系统不会再次调用 activity,而是重用已经 运行 activity 并调用方法 onNewIntent(intent)。这意味着如果 activity 是新启动的,那么 onCreate() 将被调用。如果 activity 被重用(因为它是由推送通知、深层链接等触发的),那么 onNewIntent(intent) 将被调用。在 onCreate()onNewIntent() 中,我调用一个方法来决定接下来 screen/fragment/activity 是什么,并从 getIntent() 移交意图。完成。