1

アプリを開いたときに最初に音楽を再生し、音楽が再生された後に残りのコードが実行されるアプリを作成しようとしています。現在、私は以下のようなことをしています:

MusicPlayer mp=new MusicPlayer();
mp.setDataSource("source");
mp.prepare();
mp.start();

do {

} while(mp.isPlaying());

do-while ループでシステムをアイドリングしているだけですが、これが原因でシステムが過負荷になり、エミュレーターもこれが原因で動かなくなっていると思います。

これを行う効果的な方法はありますか?

4

2 に答える 2

2

あなたのやりたいことが正しいかどうかはわかりません。UI スレッドをブロックしても何も起こらず、一部の音楽しか再生されていない場合、ユーザーは何かがおかしいと感じ、正しく機能していないと感じる可能性があります。

スプラッシュが表示されている、コンテンツがダウンロードされている、または何かが起こっているときに音楽を再生する方が良いでしょう。

myPlayer.setOnCompletionListener音楽が完成した後に実行する必要があるイベント/メソッドを呼び出すために@Manuが言ったように使用します。次のようなことをしなければなりません:

public class MyActivity extends Activity {

    private MusicPlayer mp;

    protected void onCreate(...) {
        super.onCreate(...);
        mp = new MusicPlayer();
        mp.setDataSource("source");
        mp.setOnCompletionListener(
            new OnCompletionListener() {

                onCompletion(MediaPlayer player) {
                    otherMethod();                     
                }

            });
    }

    protected void onResume() {
        super.onResume(); 
        playMusic();
    }

    private void playMusic() {
        mp.prepare();
        mp.start();
    }

    // Called when the music is finished.
    private void otherMethod() {
        // Do something.
    }

}
于 2013-10-02T12:05:56.263 に答える