3

我们为 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 编程最佳实践和三星的建议),但这并没有解决问题。

4

1 回答 1

1

我用两个动作解决了这个问题:

  • 我不是简单地调用,而是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

于 2013-03-13T09:33:26.327 回答