Java 在后台运行线程时MediaPlayer不显示视频

Java 在后台运行线程时MediaPlayer不显示视频,java,android,multithreading,android-mediaplayer,Java,Android,Multithreading,Android Mediaplayer,我有一个MediaPlayer在播放一个文件,我想在后台连续写入日志数据。这应该由线程(或者类似的概念,但是我不知道异步任务是否是解决这个问题的方法)。线程不应该总是写入,但在写入之间暂停半秒 我的MediaPlayer工作正常,但一旦我尝试运行我的线程,就不会显示任何视频。线程似乎正在运行 以下是相关代码: 线程: MediaPlayer开始: 这里是我为视频准备播放器并创建线程实例的地方 public void preparePlayerForVideo(int videoIndex) {

我有一个
MediaPlayer
在播放一个文件,我想在后台连续写入日志数据。这应该由
线程
(或者类似的概念,但是我不知道
异步任务
是否是解决这个问题的方法)。线程不应该总是写入,但在写入之间暂停半秒

我的
MediaPlayer
工作正常,但一旦我尝试运行我的线程,就不会显示任何视频。线程似乎正在运行

以下是相关代码:

线程: MediaPlayer开始: 这里是我为视频准备播放器并创建线程实例的地方

public void preparePlayerForVideo(int videoIndex) {
  Log.d(TAG, "Creating new logging thread");
  mLoggingThread = new LoggingThread(Session.sTracks.get(videoIndex));

  mPlayer = new MediaPlayer();
  // various calls to set up player, this works fine
  mPlayer.setOnPreparedListener(this);
  mPlayer.prepare();
}
这是从
onPreparedListener
调用的

public void startVideo() {
  mIsVideoPlaying = true;
  mLoggingThread.run();
  mPlayer.start();
}
LogCat输出: 从输出来看,线程似乎运行正常,但为什么播放机没有显示任何视频

02-15 12:00:18.904:D/SubjectivePlayerSession(17918):创建新的日志线程
02-15 12:00:18.944:D/SubjectivePlayerSession(17918):创建日志线程
02-15 12:00:18.944:D/SubjectivePlayerSession(17918):将数据源设置为:/mnt/sdcard/SubjectiveMovies/pair_01-video_a-GUT_DEUTSCH.mp4
02-15 12:00:19.095:V/SubjectivePlayerSession(17918):视频大小更改呼叫
02-15 12:00:19.095:D/SubjectivePlayerSession(17918):运行线程
02-15 12:00:19.095:D/SubjectivePlayerSession(17918):尝试运行线程
02-15 12:00:19.095:D/主观性播放机会话(17918):正在播放视频。将评级写入文件。
02-15 12:00:19.605:D/主观性播放机会话(17918):正在播放视频。将评级写入文件。
...

您应该启动一个
线程
对象,并将您的
可运行
添加到其中:

public void startVideo() {
  mIsVideoPlaying = true;
  new Thread(mLoggingThread).start();
  mPlayer.start();
}

调用
Runnable#run()
将在当前线程上运行代码,而不是创建一个新线程。

这非常有效。现在,如果我想停止线程,我是否需要将
新线程(…)
分配给一个变量并对其调用
.stop()
?或者我应该让我的
.run()
方法在媒体播放器的
onCompletionListener
中将
mIsVideoPlaying
设置为
false
时返回吗?任何一种方法都可以工作(如果变量传递正确,您现在发布的代码中没有该部分),但我会在(mPlayer.isVideoPlaying())或类似的东西-这是一个更干净的代码。Android媒体播放器没有这种方法,但我将
错误视频播放
作为活动的一个不稳定成员,它似乎可以工作。
public void startVideo() {
  mIsVideoPlaying = true;
  new Thread(mLoggingThread).start();
  mPlayer.start();
}