我们为 2011 和 2012 平台开发了三星智能电视应用。该应用程序基于 HTML/JavaScript。通常应用程序运行良好,但退出应用程序后变得非常慢,速度是原来的六倍。测得的 JS 执行时间只是稍微慢一点,但 HTML 元素在屏幕上的渲染速度要慢得多。这种行为发生在所有设备上(电视和带有智能电视平台的蓝光播放器设备)。
通过执行JS命令实现退出
var widgetAPI = new Common.API.Widget();
widgetAPI.sendExitEvent();
当使用命令时,应用程序的行为相同(即再次启动后变慢)
widgetAPI.sendReturnEvent();
(将用户返回到 Smart Hub 而不是完全退出)。通过反复试验,我发现故意让应用程序崩溃可以解决问题 - 这会导致与调用 sendExitEvent
方法的用户行为相同。然而,这不是一个非常干净的方法,而且我更愿意使用 sendReturnEvent
命令。
如何以编程方式将用户返回到 Smart Hub,以便应用程序在再次启动时不会变慢?
我希望有人对此有一些第一人称的经验和建议。我试图消除可能的 JS 内存泄漏源(使用 JS 编程最佳实践和三星的建议),但这并没有解决问题。
最佳答案
我用两个 Action 解决了这个问题:
- 我没有简单地调用
widgetAPI.sendReturnEvent()
,而是将用户重定向到一个新页面 exit.html(使用window.location.href
),该页面几乎是空的,除了 onload 处理程序,它调用以下命令(相当于widgetApi.sendReadyEvent()
和widgetApi.sendReturnEvent()
但不需要包含 Widget。 js文件)
curWidget.setPreference("ready","true");
curWidget.setPreference("return","true");
- 注释掉所有
alert
命令。显然多次调用alert
会泄漏内存,因此在退出应用程序时不会从内存中收集累积的垃圾,导致重启后速度变慢
仅应用这两种方法似乎可以解决问题。推测是应用程序累积内存泄漏导致应用程序重启后变慢
1) 在文档级别(尽管我们努力遵循所有指南来防止它们),然后在加载另一个 HTML 文件后清除。
2) 在全局级别,由调用 alert
关于javascript - Samsung Smart TV App 退出再启动后速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15367400/