工作灯 5.0.5 安卓 - 4.1
我一直致力于将 native 和混合代码库合并到单个工作灯应用程序中。作为其中的一部分,我已将启动器事件 launchMode 更新为“标准”,以便当应用程序恢复时,它会恢复到正确的 Web View 或基于用户查看的上次事件的另一个事件。 (worklight 默认项目设置为“singleTask”)
当从 eclipse 直接构建到设备上时,此配置工作正常。当我创建一个签名的 APK 副本到设备并安装时,我在恢复生命周期中得到不同的行为。以下是产生错误的步骤
- 启动应用
- 更改应用的状态
- 按主页按钮
- 打开应用程序文件夹
- 点击应用程序图标 结果 - 应用程序运行 onCreate 而不是 onResume
奇怪的是,如果我长按主页,然后从最近使用的应用程序中选择我的应用程序,它就会恢复正常。 (为什么它们会不同?)
我最近升级到了 5.0.5,现在才注意到这个问题。也许与新的phonegap版本有关?
使用新的 Worklight 项目很容易重现该问题。
- 使用不带框架的新建项目向导。
修改您的 Android 事件
activity android:name=".SimpleWorklight" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden" android:launchMode="standard"
更新标记,以便您可以更改其状态以证明 onCreate 与 onResume
变量计数器=1; 函数按钮点击(){ document.getElementById("label").innerText="Clicked"+counter; 计数器=计数器+1; }<input type="submit" onclick="buttonClick()"> <span id=label>SimpleWorklight</span>
与此相当相似 https://groups.google.com/forum/?fromgroups=#!topic/android-developers/UjWcsFMe6ik
更新 - 我尝试了相同的测试并在 5.0.2.407-developer-edition 上运行时得到了相同的结果 亚伦·奥尔斯布鲁克
最佳答案
我解决了这个问题,这似乎是 Android 中的一个可能的错误(或者可能只是 Android 的行为方式)当您从应用程序图标启动时,它基本上总是在现有事件之上启动一个新事件(如果存在)已经。这里提到了几种可能的解决方案。 http://code.google.com/p/android/issues/detail?id=2373
我首先尝试了添加到 onCreate 方法的最简单方法
if (!isTaskRoot()) {
finish();
return;
}
但这从 cordovawebview 库返回了 NPE。我没有尝试通过 Worklight 调试并进入 Cordova,而是尝试了此处找到的解决方案 https://github.com/cleverua/android_startup_activity
您可以在其中创建一个启动 Android 事件,该事件将查看所有正在运行的任务。如果它发现任务正在运行,它将简单地关闭新事件并回退到正在运行的事件。如果它没有发现任务正在运行,它将创建新的意图并进行转换。
关于ibm-mobilefirst - onResume 不适用于 Worklight 项目中的 android launchMode 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14960355/