WL 5.0.6.1 Android - 直接更新使 Native/Cordova 资源保持活动/在内存中(例如 BusyIndi​​cator),但引用丢失

Posted

技术标签:

【中文标题】WL 5.0.6.1 Android - 直接更新使 Native/Cordova 资源保持活动/在内存中(例如 BusyIndi​​cator),但引用丢失【英文标题】:WL 5.0.6.1 Android - Direct Update keeps Native/Cordova resources active/in memory (e.g. BusyIndicator) but reference is lost 【发布时间】:2013-09-04 20:17:08 【问题描述】:

当我们有以下序列时,我们遇到了问题:

应用启动 网络资源开始 显示忙碌指示符 (1) 连接到 WL 服务器 触发直接更新 Web 资源重启 显示忙碌指示符 (2) 连接到 WL 服务器 成功 加载并更改为欢迎页面 隐藏忙碌指示符 (2)

这样的效果是,在直接更新的网络资源中,我们(当然)丢失/丢失了对繁忙指示器 (1) 的引用,并且在触发直接更新后我们无法隐藏该指示器。那么,我们有两个指标 (1) (2) 打开,只有一个 (2) 关闭,旧的 (1) 永远向上。

一种解决方案是在触发/执行直接更新之前获取一个事件......我们可以隐藏我们的指标 (1)。这将变得与这个问题非常相似:IBM Worklight - How can I execute javascript code before updating the application?

更通用的方法是触发应用程序的“更深”重启……这意味着还要重启本机 shell 和所有 cordova 资源。那么所有的原生资源,比如忙碌指示器和其他东西都应该被移除和重置,对吧?

有没有什么办法可以实现直接更新后应用的这种“深度”重启?这个问题已知吗?

9 月 5 日更新

我们看到在 DirectUpdate 重新启动 Web 资源之前的某个时间触发了以下事件:

window.addEventListener("beforeunload",
    function()  
       WL.Logger.debug("busy test - unload2"); 
        app.busytest.hide();
            
        , false);

window.addEventListener("unload",
    function()  
       WL.Logger.debug("busy test - unload3"); 
         app.busytest.hide();
            
        , false);

...但不幸的是,隐藏我们的 WL.BusyIndi​​cator “busytest”不再适用于这些事件。有人有什么想法吗?

但如果是 DirectUpdate,也许其他一些清理代码可以放在那里?

【问题讨论】:

【参考方案1】:

忙碌指示器是一个单例。如果您创建了几个繁忙的指标,显示它们然后隐藏它们 - 所有都将被隐藏。

【讨论】:

你会认为是这样的......但事实并非如此。如上所述,当在 DirectUpdate 之前“显示”忙碌指示符时,在 DirectUpdate 之后“隐藏”忙碌指示符不再起作用 - 因为您必须在代码中的某个位置调用 var busytest = new WL.BusyIndicator('content', text : 'Loading...'); 并且在 DirectUpdate 之后再次执行此 get . - 甚至在“unload”和“beforeunload”事件中“隐藏”指标的旧实例也不再起作用了! FYI ...我们目前在带有 Nexus4 android 4.3 API 18 的 Android 模拟器中看到了这一点。在 iPhone 模拟器上它似乎没问题,而且在 DirectUpdate 之后忙碌似乎消失了。我们将看看是否可以在设备上进行测试……尽管如果模拟器中已经出现错误,则不打算这样做。 在安卓手机 LG Optimus 4.1.2 上测试。存在同样的问题...当 DirectUpdate 完成时 BusyIndi​​cator 不会停止/隐藏。在 DirectUpdate 之后,对 BusyIndi​​cator 的 javascript 引用消失了。在“新”指标对象上调用“隐藏”(甚至多次)不会隐藏在 DirectUpdate 之前仍然可见/覆盖的指标对象。 尝试创建新的busyIndi​​cator并首先调用busy.show()。然后调用busy.hide()。由于busyIndi​​cator 的异步特性,您可能需要在setTimeout 内调用busy.hide() 50-100 毫秒。 我不确定我是否理解你的建议......我现在做的是 1. 新的 BusyIndi​​cator 并显示在 wlCommonInit 2.client.connect 3. onSuccess 和 onFailure busy.hide。 ... 现在使用 DirectUpdate 1. 和 2. 由于 Web 资源的重新启动而执行了两次。 3. 只有一次....即使我在 onFailure 和 onSuccess 中放了 5 或 6 个 busy.hide,它也不会隐藏第一个 Busy Indicator .... 你现在建议在 onSuccess 和 onFailure 中放一个 setTimeout 吗?这真的会改变什么吗?

以上是关于WL 5.0.6.1 Android - 直接更新使 Native/Cordova 资源保持活动/在内存中(例如 BusyIndi​​cator),但引用丢失的主要内容,如果未能解决你的问题,请参考以下文章

下载更新后 MobileFirst 8.0 直接更新失败

从 WL6.3 迁移后,Android 中的 IBM MobileFirst 7.1 服务器连接失败

MFP 7.1 禁用直接更新?

通过不同的 URL 将一些 WL.Client 适配器调用流量重新路由/转移到 WL 服务器(用于 PCI 支付和安全要求)?

在 iPad 上直接更新到 Windows 上的 Worklight Studio 开发服务器不起作用

Android 上的 jQM + WL - 横向 CPU 高