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一時停止イベント ( ) を発生させる目的の 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 に答える