暂停事件在 PhoneGap iPhone 中无法正常工作?

Posted

技术标签:

【中文标题】暂停事件在 PhoneGap iPhone 中无法正常工作?【英文标题】:pause event is not working properly in PhoneGap iPhone? 【发布时间】:2011-11-22 06:48:40 【问题描述】:

这是我的代码

    //This is an event that fires when a PhoneGap application is put into the background.
    document.addEventListener("pause", onPause, false);

    //This is an event that fires when a PhoneGap application is retrieved from the background.
    document.addEventListener("resume", onResume, false);

    // Handle the pause event
    function onPause()
    console.log("pause : app is put into background");
    


    // Handle the resume event
    function onResume() 
    console.log("resume : app is put into foreground");
    

当我按下主页按钮时,控制台中没有日志但是当我单击应用程序(使其在前台)时,我的日志是

2011-11-22 12:11:37.206 Event[644:207] [INFO] pause : app is put into background
2011-11-22 12:11:37.206 Event[644:207] [INFO] resume : app is put into foreground

我不知道为什么在前台调用暂停函数。 有什么我做错了吗?

【问题讨论】:

我在 android 上遇到了同样的问题。 【参考方案1】:

这是来自文档

ios Quirks

在暂停处理程序中,任何通过 Objective-C 的调用都将不起作用,任何交互式调用(如警报)也不起作用。这意味着您不能调用 console.log(及其变体),或任何来自插件或 PhoneGap API 的调用。这些只会在应用恢复时处理(在下一个运行循环中处理)。

【讨论】:

我也有同样的问题。我知道当我按下主页按钮以最小化应用程序时,console.long 不起作用,但是当我恢复它时,应该有一条消息吧? 它似乎对我不起作用有没有办法可以检查可能出了什么问题?我也尝试过在 documentready 上使用 console.log ,但这也没有用,所以也许我做错了什么。我把我的代码贴在这里给你看看你是否能发现真正有用的问题。 jsfiddle.net/6QXY7 试过了,好像不行。我的代码与文档中的代码相同【参考方案2】:

我怀疑实际发生的情况是暂停事件中的 console.log() 并没有在恢复时被触发,因为它只是系统无法输出你的 console.log() 直到它回来。

PhoneGapDelegate.m 中的 Objective-C 方法触发暂停事件 (applicationWillEnterForeground:(UIApplication *)application) 将其发送到 javascript,但此时应用程序处于后台并暂停。 JavaScript 在重新进入前台之前无法接收事件。

要对此进行测试,只需将您的应用程序后台运行更长的时间......然后它应该会导致他们的错误:

void SendDelegateMessage(NSInvocation*): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode

这似乎是 PhoneGap 中的一个错误。也许您可以通过https://github.com/callback/callback-ios 提出问题?

【讨论】:

感谢您的建议....我会检查它并尝试获得确切的答案..当应用程序长时间处于后台时我没有收到任何错误...这个方法在哪里void SendDelegateMessage(NSInvocation*): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) 也许该错误是我的测试应用程序特有的。我在github.com/callback/callback-ios/issues/17 添加了一个可能有帮助的问题。当前没有为applicationWillResignActiveapplicationDidBecomeActive 触发事件。当应用程序不活动时,这些可能更适合停止计时器等。

以上是关于暂停事件在 PhoneGap iPhone 中无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap 事件在 iPhone 中不起作用

使用 PhoneGap/jQuery Mobile 以编程方式在 iPhone/Android 日历中添加事件?

PhoneGap 捕捉 iPhone 的“Go”按下事件

在 iOS4.3 和 iOS 5 的 phonegap 中暂停和恢复监听器不工作

应用程序暂停时如何在 iPhone 上获取屏幕锁定/解锁事件?

无法在 iPhone 的 PhoneGap 中使用 AJAX(简单 javascript)调用基于 REST 的 Web 服务