2

画像アプリケーションがあり、画像が表示されている間に音楽を再生しています。現在、UI スレッドには両方の機能があります。

その音楽再生部分を、UI スレッドとは別の別のスレッドに移動したいと考えています。

どうすればこれを達成できますか?

ハンドラーとランナブルを使用する場合の複雑さ:

run() には実行するすべてのものを含める必要がありますが、音楽コードはイベントベースであり、毎回実行するコードが異なるため、あちこちに散らばっています。

したがって、handler と runnable を使用してこれを実装できる唯一の方法は、それぞれが特定の機能を実行する複数の runnable がある場合です。これは、すべての音楽コードが同じスレッドで実行されないことを意味し、異なるスレッドで実行されることを意味します。これは良いことではありません.

では、どうやってこれを行うのですか?

4

2 に答える 2

0

これは私がしたことです:

 public static void startTrack() {
    PLAYER_STATE = IS_PLAYING;
            /*Setup the handler and runnable*/
    mMusicHandler = new Handler() {         
    }; 

    mMusicRunnable = new Runnable() {
        public void run() {
             Log.d(TAG,"inside Music Runnable");
            try {
                mPlayer.start();        
            } catch (IllegalStateException e) {
                Log.d(TAG,"ILLEGAL STATE-START");
                handleIllegalState();
            }
        }
    };
    mMusicHandler.post(mMusicRunnable);

}

そのため、音楽セットアップの開始部分のみが別のスレッドで実行されます。

于 2012-10-03T07:35:01.977 に答える
0

Serviceaを使用して a を作成することをお勧めしBinderます - そうすれば、それを処理できます。(プール内の単一または複数の s - アプリケーションの構造と持っているイベントに依存します。実装もそうです)をService作成し、音楽イベントをエグゼキュータに渡すだけです。ExecutorThreadQueue

于 2012-09-05T10:38:46.973 に答える