4

这是我的代码

    //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

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

4

2 回答 2

5

这是来自文档

iOS 怪癖

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

于 2012-01-23T15:45:36.393 回答
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 ?

于 2011-11-22T08:51:26.810 回答