我在这里面临一个小问题,因为每当用户回到应用程序时(我在后台),我都会尝试将一些javascript代码运行到我的WKWebView
中。
所以,基本上,有两种可能性:
用户从后台输入应用程序(多任务,无论如何)。这里发生的是applicationWillResignActive
我正在保存变量App.resignTime = NSDate().timeIntervalSince1970
,我会根据NSDate().timeIntervalSince1970
上的当前applicationWillEnterForeground
进行检查。所以,如果差异大于25秒(你知道在30秒后iOS会阻止应用程序使用内存,因此从我的套接字服务器断开WKWebView
,无法接收新消息。所以,如果那样是这样的,我运行一些JS代码,以获取新消息。
执行方法didReceiveRemoteNotification
且UIApplicationState
为.Inactive
或.Background
时,表示用户通过推送通知从后台状态“打开”了应用,运行几乎相同的代码,但另外还有一些东西(因为我想打开那个会话室而不是只刷新所有会话)。
现在问题是applicationWillBecomeActive
正在两种情况下运行,我想在用户从推送通知中打开应用程序时跳过它...因为我最终有两个冲突的异步请求。< / p>
我保存一个变量,说用户从推送通知中打开,跳过applicationWillBecomeActive
但applicationWillBecomeActive
正在didReceiveRemoteNotification
之前运行,所以我不能以这种方式跳过它。
我不知道我是否正确解释了这一点..但希望我做到了。请问,我会尝试进一步解释。
答案 0 :(得分:0)
这里有几种可能性:
1)如果在applicationWillBecomeActive
中开始的请求与您在didReceiveRemoteNotification
中开始的请求相同 - 为什么要在didReceiveRemoteNotification
中发送请求?或者:检查didReceiveRemoteNotification
请求是否已经完成,然后再重新执行。
2)不要在applicationWillBecomeActive
中发送有问题的请求,但是在稍后的状态下(当您知道是否来自推送通知时,例如在视图控制器中,您启动的计时器中)在applicationWillBecomeActive
,或可能在applicationDidFinishLaunchingWithOptions
)
3)看看在两种情况下做同样事情会产生什么影响 - 它经常发生的次数,产生的数据负载量以及用户体验是什么。如果答案不常,不多且用户不会注意,请执行相同的操作。