【问题标题】:pause event is not working properly in PhoneGap iPhone?暂停事件在 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 上遇到了同样的问题。

标签: ios iphone cordova phonegap-plugins


【解决方案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 触发事件。当应用程序不活动时,这些可能更适合停止计时器等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
相关资源
最近更新 更多