HandlerThread を使用して、独自のスレッドで MediaPlayer を実行する方法を学習しようとしています。しかし、私は最初のステップで失敗しています。Java/Android のスレッドを理解するのに 2 日間苦労しましたが、本当に助けが必要です。(Java と Android の両方で数え切れないほどの例と javadoc ページを読みました)、非常にイライラしたり、愚かだと感じています。
以下の例では、getLooper() は無期限にブロックします。理由がわかりません。以下のコードを修正してこれを修正する方法を教えてください。
また、MediaPlayer のメソッドが (非同期で) 呼び出されるメッセージを送信する方法の例は非常に価値があり、おそらく 1 週間節約できます。
ありがとうございました
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();
}
}
}