在android中的主线程中等待

时间:2013-10-02 10:03:43

标签: android synchronization

我正在尝试创建一个应用程序,该应用程序在打开应用程序时首先播放音乐,并且在播放音乐之后执行其余代码。现在我正在做如下的事情:

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

do {

} while(mp.isPlaying());

我只是使用do-while循环暂停系统,但我认为系统因此而过载,仿真器也因此而陷入困境。

有没有有效的方法呢?

2 个答案:

答案 0 :(得分:3)

有一个名为CompletionListener的回调函数。您可以使用以下命令进行设置:

myPlayer.setOnCompletionListener

您可以在此处找到描述:http://developer.android.com/reference/android/media/MediaPlayer.html#Callbacks

答案 1 :(得分: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.
    }

}