Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 退出和重新进入后,应用程序的行为不同_Java_Javascript_Android_Cordova_Lifecycle - Fatal编程技术网

Java 退出和重新进入后,应用程序的行为不同

Java 退出和重新进入后,应用程序的行为不同,java,javascript,android,cordova,lifecycle,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> 警报(“文件准备就绪”); document.a

Cordova,版本3.5.0-0.2.6

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

警报(“文件准备就绪”);
document.addEventListener(“deviceready”,函数(){
警报(“设备警报”);
},假);
我在部署后进入应用程序,收到“documentready”和“deviceready”警报。 我用后退按钮离开应用程序。 我只准备了“文档准备”。 当我使用taskmanager强制关闭应用程序或重新部署应用程序时,我会收到两个警报

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


我更喜欢一个解决方案,在我离开之前,之后,没有证据表明应用程序已经打开。从垃圾收集等中未还原任何内容。理想情况下,执行与任务管理器中的强制关闭方法相同的日志


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

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



问题仍然悬而未决-获得50卢比奖金

我不知道你为什么想要这样的行为,但你可以在按下后(或完成后)杀死该应用程序。 调用
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事件。您可以在此处找到有关backbutton事件的详细信息:。我找不到关于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);

将其添加到您的
mainActivity.java
(项目中的任何名称):

这应该起作用:

在my_app_dir->config.xml中添加

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

然后打开
cmd
,转到项目文件夹并运行
cordova build android;cordova run——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);
    }()); 

看起来事件将在Phonegap(Cordova)加载后运行。如果你重新运行这个应用程序,Android可能没有杀死它或者垃圾收集它,所以在肯定杀死它并重新运行之前,期待它再次发生是没有意义的。也许您应该在活动暂停代码中调用finish()。。。但要当心!可能不是你想要的!您应该使用
resume
事件来执行应用程序从后台向前推进后应触发的操作:@eduayo:Uncaught ReferenceError:finish未定义。我认为您不应该在doc ready中添加eventListener。它们与JQuery无关。它们是Cordova eventsOK,我删除了周围的
$(document).ready(function(){..}),但它仍然是一样的。不,正如我上面所说的,如果我按back,我会离开应用程序,但它不会被杀死。当我重新进入应用程序时,除非我使用任务管理器将其关闭,否则它将无法工作。(这就是我想要这种行为的原因)。我知道这一点——我是说,当用户按下返回键复制任务管理器的kill行为时,应该显式调用
killProcess()
。这将解决你的问题。好的,因为我没有在Android上用Java做任何操作,你能告诉我在哪里使用
killProcess()
?添加
public void onBackPressed(){Android.os.Process.killProcess(Android.os.Process.myPid());}
也不起作用。你在哪里写的代码片段?CordovaActivity?不幸的是,它不会终止应用程序。这意味着,当我返回并重新进入应用程序时,我遇到了一个问题。你确定app.exitApp()已执行吗?因为它应该可以工作(对我来说是可以的),所以deviceready被执行,我在启动时得到了我的splashscreen。你能用cordova版本更新你的主要帖子吗?我非常确定app.exitApp()已经执行了。如果我放下它,当我离开它时,应用程序就什么也不做了。我更新了主要帖子,我的Cordova版本是3.5.0-0.2.6公共类MyApp扩展了CordovaActivity{public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);super.init();super.loadUrl(Config.getStartUrl());}public void onBackPressed(){finish();}
不幸的是,它没有改变任何东西。它仍将显示在taskmanager列表中,但在重新启动时应以不同方式进行处理
    document.addEventListener('backbutton', function() {                     
       navigator.app.exitApp();
    }, false);
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);
    }());