3

2011 および 2012 プラットフォーム用の Samsung Smart TV アプリを開発しました。アプリは HTML/JavaScript ベースです。通常、アプリのパフォーマンスは良好ですが、アプリを終了すると非常に遅くなり、6 倍になります。測定された JS 実行時間はわずかに遅くなりますが、HTML 要素が画面にレンダリングされるのははるかに遅くなります。この動作は、すべてのデバイス (スマート TV プラットフォームを備えた TV および Blu-Ray プレーヤー デバイス) で発生します。

exit は JS コマンドを実行することで実現されます

var widgetAPI = new Common.API.Widget();
widgetAPI.sendExitEvent();

コマンドを使用すると、アプリは同じように動作します (つまり、再起動すると遅くなります)。

widgetAPI.sendReturnEvent();

(完全に終了するのではなく、ユーザーをスマート ハブに戻します)。試行錯誤の結果、意図的にアプリをクラッシュさせることで問題が解決することがわかりました。これにより、sendExitEventメソッドを呼び出すのと同じ動作がユーザーにもたらされます。ただし、これはあまりきれいな方法ではありません。さらに、sendReturnEventコマンドを使用することをお勧めします。

アプリを再起動したときにアプリが遅くならないように、ユーザーをプログラムでスマート ハブに戻すにはどうすればよいですか?

誰かがこれに関して一人称の経験とアドバイスをしてくれることを願っています。(JS プログラミングのベスト プラクティスと Samsung からのアドバイスを使用して) JS メモリ リークの原因の可能性を排除しようとしましたが、それでも問題は解決しませんでした。

4

1 に答える 1

1

2つのアクションを使用して問題を解決しました:

  • 単に呼び出す代わりに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 に答える