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

时间:2011-11-22 06:48:40

标签: ios iphone cordova phonegap-plugins

这是我的代码

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

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

2 个答案:

答案 0 :(得分:6)

这是来自文档

iOS Quirks

  

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

答案 1 :(得分:2)

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

PhoneGapDelegate.m中用于触发暂停事件(applicationWillEnterForeground:(UIApplication *)application)的Objective-C方法将其发送到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

提出问题