默认情况下,Android的MediaPlayer是否在线程中运行?

时间:2019-11-16 04:51:06

标签: android android-studio

假设我在activity_main.xml中创建了两个按钮,例如:

...
<Button
    android:id="@+id/button1"
    ...
    android:onClick="playMusic1"
    android:text="music1.mp3"
/>

<Button
    android:id="@+id/button2"
    ...
    android:onClick="playMusic2"
    android:text="music2.mp3"
/>
...

分别使用以下方式播放music1.mp3music2.mp3

...
public void playMusic1(View view)throws IOException {
        Button passed_btn = (Button)view;
        AssetFileDescriptor afd = getAssets().openFd(passed_btn.getText().toString());
        MediaPlayer player = new MediaPlayer();

        player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        player.prepare();
        player.start();
    }
...   





...
public void playMusic2(View view)throws IOException {
        Button passed_btn = (Button)view;
        AssetFileDescriptor afd = getAssets().openFd(passed_btn.getText().toString());
        MediaPlayer player = new MediaPlayer();

        player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        player.prepare();
        player.start();
    }
...   

启动应用程序时,我可以同时播放两首歌曲,这是因为MediaPlayer在与主线程分开的线程中运行,但是hereenter link description here都不行关于MediaPlayer处于线程中的任何内容。它确实提到了异步触发某些状态,但仅此而已(尽管可能我会错过它)。如果它确实在线程中运行,那么我们可以同时播放的媒体数量是多少?

1 个答案:

答案 0 :(得分:1)

它确实在Thread中运行。但这不是我们曾经考虑过的事情。当您开始播放媒体文件时-在本机实现(由本机媒体库处理)中,使用来自声源的字节创建新的Thread。后来,此源被本机MediaService占用为单个音频输出,并导航到HAL