2

onTimeIndexChangedメディアプレーヤーイベントを購読しようとしています。私が購読しているビューが集中している限り、それはうまく機能します。戻るボタンまたはウィジェットボタンを押すと、ビューがぼやけてイベントを受信しなくなります。

ビューを切り替えても、このサブスクリプションを継続することはできますか?ウィジェット全体のサブスクリプションはありますか?

クライアント側での再生時間をカウントできるかどうか調べようとしています。

4

1 に答える 1

2

これはYahoo!でも回答されました。コネクテッドTVフォーラム:http ://developer.yahoo.net/forum/?showtopic = 7383 はい、あなたは正しい方向に進んでいます。メディアプレーヤーはシングルトンであるため、特定のビューにバインドされていません。ウィジェットのグローバル実行コンテキストでそれをサブスクライブするリスナーを定義できます。このようにして、ビューがgcされたときに発生するイベントを引き続き受信して処理でき、それらのイベントを引き続き受信できます。

これらのグローバルサブスクリプションをinit.jsに配置して、中央に配置されるようにします(ベストプラクティス)。

 
EventHandlers.handlerPlayerEvent.subscribeTo(KONtx.mediaplayer, ['onStateChange', 'onTimeIndexChanged'], EventHandlers);

次に、Javascript / core / EventHandlers.jsで:


var EventHandlers = {

    //snipped for brevity;

    handlerPlayerEvent: function(event) {
            switch(event.type) {
                    case 'onStateChange':
                            switch(event.payload.newState) {
                                    case KONtx.mediaplayer.constants.states.PLAY:
                                            if(!this._snippetAdded) {
                                                    KONtx.application.addViewConfig({ id: 'snippet-nowplaying',

viewClass: VideoNowPlayingSnippetView }); this._snippetAdded = true; } break; case KONtx.mediaplayer.constants.states.UNKNOWN: case KONtx.mediaplayer.constants.states.ERROR: case KONtx.mediaplayer.constants.states.STOP: case KONtx.mediaplayer.constants.states.EOF: KONtx.application.removeView('snippet-nowplaying'); this._snippetAdded = false; break; } break;

                    case 'onTimeIndexChanged':
                            //do something interesting;
                            break;
            }
    }

};

また、ビューでイベントをサブスクライブしている場合は、ビューのhideViewリスナーでイベントのサブスクライブを解除することも非常に重要であることを追加する必要があります。これにより、メモリリークやその他の望ましくない動作を防ぐことができます。

于 2010-10-20T19:39:52.577 に答える