应用程序在退出和重新进入后表现不同

App behaves different after exit and re-enter

本文关键字:新进入 退出 应用程序      更新时间:2023-09-26

Cordova,版本3.5.0-0.2.6

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

我在部署后进入应用程序,收到"documentready"answers"deviceready"警报。我用后退按钮离开应用程序。我只准备了"文档"。当我用任务管理器强制关闭应用程序或重新部署它时,我会收到两个警报。

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


我更喜欢这样一种解决方案,即没有证据表明应用程序在我离开之前和之后都被打开过。没有从垃圾收集等中恢复任何内容。理想情况下,从任务管理器执行与强制关闭方法相同的日志。


好:我希望,当我通过后退按钮关闭我的应用程序时,会发生与打开任务管理器并强制关闭应用程序完全相同的。这至少在理论上可行吗?

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


问题仍然存在-50秒有界赢取

将其添加到mainActivity.java(无论在项目中称为什么):

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

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

将此添加到你的Cordova活动中,它应该会杀死所有没有任何残留的东西:

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

我已经实现了同样的事情,我使用了来自cordova的backbutton事件。你可以在这里找到更多关于后退按钮事件的信息:链接。我找不到关于app.exitApp()函数的文档,但我知道它只适用于android和amazonfireos。

请参阅下面的代码片段,您只需要知道何时退出,但您可能从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);

这应该有效:

在my_app_dir->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;

对我来说,问题可能是添加事件侦听器时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);
    }());