我有一个使用推送的 android 应用程序。如果应用程序从服务器接收到推送消息,它会创建一个推送通知(带有标题、消息、图标)并将其呈现给用户。
正常情况 单击通知会打开一个活动(不是启动器),活动会打开一个片段,该片段显示基于通知的内容。这里没有魔法,一切都按预期工作。
特殊/坏情况 如果设备至少 2 小时处于非活动状态并且您拿起它并单击之前推送的通知,那么它会像正常情况一样打开 Activity 但没有片段出现。相反,将调用启动器。
虽然调试这既费时又令人沮丧,但我发现了以下几点。也许有人有一个想法:
活动通常以我从资源加载的动画开始。我在 onCreate() 中加载并运行它。如果 Activity 被推送调用,那么动画将被加载但永远不会运行。我用一个等待 2 秒并检查动画监听器是否被调用的处理程序绕过了这个。如果不是(坏情况),则处理程序调用代码来打开片段。
打开片段导致崩溃:IllegalStateException:onSaveInstanceState 后无法执行此操作。类似于这里Exception java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState所以我替换了 commitAllowingStateLoss()。现在没有崩溃了,但片段没有出现。只有 Fragment.newInstance() 将被调用,但不会调用 onCreate() 或任何其他生命周期方法。
问题:长时间不活动后似乎破坏了我的代码中的函数的疯狂状态是什么?
设备:我目前正在使用带有 Android 6.0.1 的 Nexus 5 进行测试