событие паузы не работает должным образом в iPhone PhoneGap? - PullRequest
4 голосов
/ 22 ноября 2011

Это мой код

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

6 голосов
/ 23 января 2012

Это из документов

Причуды iOS

В обработчике паузы любые вызовы, проходящие через Objective-C, не будут работать илюбые интерактивные вызовы, такие как оповещения.Это означает, что вы не можете вызывать console.log (и его варианты) или любые вызовы из плагинов или PhoneGap API.Они будут обработаны только после возобновления работы приложения (обработано в следующем цикле выполнения).

2 голосов
/ 22 ноября 2011

Я подозреваю, что на самом деле происходит то, что console.log () из события pause не столько запускается при возобновлении, сколько просто, что система не может вывести ваш console.log (), пока он не вернется.

Метод Objective C в PhoneGapDelegate.m, который запускает событие паузы (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?

...