gpt4 book ai didi

java - HandlerThread.getLooper() 无限期阻塞

转载 作者:行者123 更新时间:2023-11-30 11:16:00 26 4
gpt4 key购买 nike

我正在尝试学习如何使用 HandlerThread 在其自己的线程中运行 MediaPlayer。但我在第一步就失败了。我花了 2 天的时间痛苦地试图理解 Java/Android 中的线程,并且真的需要一些帮助。 (我已经阅读了无数示例和 javadoc 页面,包括 Java 和 Android)并且感到非常沮丧/愚蠢。

在下面的示例中,getLooper() 会无限期地阻塞。我不知道为什么。有人可以告诉我如何修改下面的代码来解决这个问题吗?

此外,关于如何发送导致 MediaPlayer 方法被调用(异步)的消息的示例将非常有值(value),可能会节省我一周的时间。

谢谢

public class HandlerThreadExample {

private MediaPlayerThread mMpThread;
private Looper mMptLooper;
private Handler mMptHandler;

public HandlerThreadExample(){
mMpThread = new MediaPlayerThread();
mMpThread.start();
mMptLooper = mMpThread.getLooper(); // everything freezes here
}
public void setMediaPlayerDataSource(Uri uri){
// send message that calls mMediaPlayer.setDataSource(uri);
}
public void prepareMediaPlayer(){
// send message that calls mMediaPlayer.prepare();
}
public void startMediaPlayer(){
// send message that calls mMediaPlayer.start();
}

private class MediaPlayerThread extends HandlerThread {
MediaPlayer mMediaPlayer;
public MediaPlayerThread() {
super("MediaPlayer Thread", HandlerThread.NORM_PRIORITY);
}
public void run (){
mMediaPlayer = new MediaPlayer();
}
}
}

最佳答案

在 MediaPlayerThread 上你需要调用 super 方法来运行:

public void run (){
mMediaPlayer = new MediaPlayer();
super.run();
}

重要的事情都在其父类run方法中执行。更具体地说,创建了循环器,如果您调用 getLooper() 并且未创建循环器,它将等待其创建。

关于java - HandlerThread.getLooper() 无限期阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25093592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com