onResume不适用于Worklight项目中的android launchMode标准

时间:2013-02-19 14:51:44

标签: ibm-mobilefirst

Worklight 5.0.5 Android - 4.1

我一直在努力将本机和混合代码库合并到一个worklight应用程序中。作为其中的一部分,我已将我的启动器活动launchMode更新为“标准”,以便在恢复应用程序时,它会根据用户正在查看的上一个活动恢复到正确的webview或其他活动。 (worklight默认项目设置为'singleTask')

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

  1. 启动应用
  2. 更改应用的状态
  3. 按主页按钮
  4. 打开应用程序文件夹
  5. 点击应用图标 结果 - 应用程序运行onCreate而不是onResume
  6. 奇怪的是,如果我在家里长按,并从最近使用的选择我的应用程序恢复正常。 (他们为什么会有所不同?)

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

    使用新的Worklight项目可以轻松重新创建该问题。

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

      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>
      
          var counter = 1;     function buttonClick(){         。的document.getElementById( “标签”)的innerText = “点击” +计数器;         计数器=计数+ 1;     }
    4. 与此类似 https://groups.google.com/forum/?fromgroups=#!topic/android-developers/UjWcsFMe6ik

      更新 - 我尝试了相同的测试,并使用5.0.2.407-developer-edition运行相同的结果 Aaron Allsbrook

1 个答案:

答案 0 :(得分: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活动,它将查看所​​有正在运行的任务。如果它发现任务正在运行,它将只关闭新活动并回退到正在运行的活动。如果它没有找到正在运行的任务,它将创建新的意图并转换。