在onPause之后,PhoneGap继续在Android上运行

时间:2014-02-02 00:06:39

标签: android cordova background

我决定测试当app在后台时,phonegap WebView是否有效。

function test2(x){
    $('<div></div>', {text: x.cmd}).appendTo($('#list'));
}
$(function(){test2({cmd:"start"});});
function cb_pause(){test2({cmd:"pause"});}
function cb_resume(){   test2({cmd:"resume"});}
function tick(){test2({cmd:"timer" + timer});timer++;setTimeout(tick, 1000);}
document.addEventListener("pause", cb_pause, false);
document.addEventListener("resume", cb_resume, false);
tick();

它在pauseresume上打印onPauseonResume。 并且每秒打印timer0timer1等。

即使我离开应用程序并开始玩游戏也会打印。 我知道我可以并且应该在onPause停止计时器但仍然。看起来不对劲。我预计android会冻结WebView。

我知道后台线程在后台应用程序中不会停止,直到它被卸载。

所以问题是:是否可以冻结/暂停/卸载onPause上的webview并解冻/恢复/加载onResume

当我说加载时我的意思是当用户离开app时它应该处于相同的状态。

当我说冻结时,我的意思是我的代码会暂停,即使它会继续调用setTimeout

我想我希望Android的行为与iOS一样。

2 个答案:

答案 0 :(得分:26)

我迟到了回应。在phonegap中,KeepRunning

中有config.xml个参数

您必须将以下行添加到config.xml

<platform name="android">
    ...
    <preference name="KeepRunning" value="false" />

它将调用pauseTimers()并暂停所有WebView。 pauseTimers()不是隐藏方法,不需要反映。

答案 1 :(得分:4)

这应该有所帮助:WebView threads never stop (WebViewCoreThread, CookieSyncManager, http[0-3])

基本上你必须使用反射来访问WebView的onPause / onResume方法,才能真正让它暂停和恢复。