2

工作灯 5.0.5 安卓 - 4.1

我一直在努力将本机和混合代码库合并到一个单独的 Worklight 应用程序中。作为其中的一部分,我已将我的启动器活动启动模式更新为“标准”,这样当应用程序恢复时,它会恢复到正确的 web 视图或基于用户查看的最后一个活动的另一个活动。(worklight 默认项目设置为“singleTask”)

从 eclipse 直接构建到他的设备上时,此配置工作正常。当我为设备创建一个签名的 APK 副本并安装时,我会在简历生命周期中获得不同的行为。以下是创建错误的步骤

  1. 启动应用
  2. 更改应用程序的状态
  3. 按主页按钮
  4. 打开应用程序文件夹
  5. 单击应用程序图标 RESULT - 应用程序运行 onCreate 而不是 onResume

奇怪的是,如果我在主页上长按,并从最近使用的应用程序中选择我的应用程序,它会恢复正常。(为什么它们会不同?)

我最近升级到 5.0.5,现在才注意到这个问题。也许它与新的phonegap版本有关?

使用新的 Worklight 项目很容易重现该问题。

  1. 使用没有框架的新项目向导。
  2. 修改你的安卓活动

    activity android:name=".SimpleWorklight"
              android:label="@string/app_name" 
              android:configChanges="orientation|keyboardHidden"
              android:launchMode="standard"
    
  3. 更新标记,以便您可以更改其状态以证明 onCreate 与 onResume

    <input type="submit" onclick="buttonClick()">
    <span id=label>SimpleWorklight</span>
    
    变量计数器=1;function buttonClick(){ document.getElementById("label").innerText="Clicked"+counter; 计数器=计数器+1;}

它与此https://groups.google.com/forum/?fromgroups=#!topic/android-developers/UjWcsFMe6ik相当相似

更新 - 我尝试了相同的测试并在 5.0.2.407-developer-edition Aaron Allsbrook 上运行得到了相同的结果

4

1 回答 1

2

我解决了这个问题,它似乎是 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 活动,该活动将查看所有正在运行的任务。如果它发现任务正在运行,它将简单地关闭新活动并回退到正在运行的活动。如果它没有找到正在运行的任务,它将创建新的意图并过渡。

于 2013-02-20T14:51:56.763 回答