退出并重新进入后,应用程序的行为会有所不同

时间:2014-09-16 12:02:11

标签: java javascript android cordova lifecycle

Cordova,版本3.5.0-0.2.6

<body><script> 
     alert("documentready");
     document.addEventListener("deviceready", function() {
             alert("deviceready");
          }, false);
 </script></body>

我在部署后进入应用程序,我得到'documentready'和'deviceready'警报。 我用后退按钮离开应用程序。 我只获得'documentready'。 当我使用任务管理器强制关闭应用程序或重新部署它时,我会收到两个警报。

我希望在正常重新进入应用程序后也会发生此行为。


我希望找到一个解决方案,在我离开之前没有任何证据表明应用程序已经打开过。没有从垃圾收集等中恢复。理想情况下,从任务管理器执行与强制关闭方法相同的日志。


好的:我希望,当我通过后退按钮关闭我的应用时,正好相同,就像我打开任务管理器并强制我应用关闭。这至少在理论上是可能的吗?

或者,我希望应用程序在通过后退按钮离开时处于“休眠状态”状态,如果我重新输入它,它的行为绝对就像从未离开过一样(呼叫与按下菜单/主页按钮时的逻辑相同。)


问题仍然开放 - 获得50RS的待遇

5 个答案:

答案 0 :(得分:1)

我不确定你为什么会想要这样的行为,但你可以在背压(或完成)时杀死应用程序。 调用android.os.Process.killProcess(android.os.Process.myPid())就像强制停止任务管理器一样。

将此添加到您的CordovaActivity中,它应该杀死所有内容而不留下任何遗留物:

@Override
public void onBackPressed() {
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(0);
}

答案 1 :(得分:1)

将此添加到您的mainActivity.java(无论您在项目中调用它):

@Override
public void onBackPressed() {
    finish();
}

答案 2 :(得分:0)

我实现了同样的事情,我使用了cordova的backbutton事件。您可以在此处找到有关后退按钮事件的更多信息:link。我找不到关于app.exitApp()函数的文档,但我知道它只适用于android和amazon-fireos。

请参阅下面的代码段,您只需知道何时要退出,但您可能从document.location对象或其他东西知道。希望它有所帮助。

document.addEventListener("backbutton", function (evt) {
    // replace this with some logic (maybe document.location) to now if you are on the main page or not
    if (true) {
        // Check if methods exists
        if (typeof navigator.app !== "undefined" && typeof navigator.app.exitApp !== "undefined") {
            evt.preventDefault();
            navigator.app.exitApp();
        }
    } else {
        history.back();
    }
}, false);

答案 3 :(得分:0)

这应该有效:

在my_app_dir-&gt; config.xml中添加

<preference name="KeepRunning" value="false" />

以下

  

document.addEventListener(“deviceready”,function(){...

添加

    document.addEventListener('backbutton', function() {                     
       navigator.app.exitApp();
    }, false);

然后打开cmd,转到项目文件夹并运行cordova build android; cordova run --device android;

答案 4 :(得分:0)

对我有用的,问题可能是在添加事件侦听器时DOM尚未就绪。并且可能是由于应用程序被缓存而导致的更快负载。使用自执行函数添加事件侦听器,您将确保已加载DOM。

function domIsReady() {
    alert('DOM is ready')
}

function deviceIsReady() {
    alert('Device is Ready')
}

( function() {
        if (document.readyState === "complete") {
            domIsReady();
        } else {
            if (window.addEventListener) {
                window.addEventListener('DOMContentLoaded', domIsReady, false);
            } else {
                window.attachEvent('onload', domIsReady);
            }
        };
        document.addEventListener("deviceready", deviceIsReady, true);
    }());