所以我正在尝试制作一个在单独线程上运行的音乐播放器。我希望在Player类(实现Runnable)中有方法来暂停、播放和转到next/prev歌曲。若我要调用线程的内部方法,它还会在单独的线程上运行吗?一切都正常工作,但我对线程还是新手,所以我不确定这是否是好的实践。有人能解释一下吗?
class Player implements Runnable, OnCompletionListener {
public static final String TAG = "Player";
private MediaPlayer mp;
private boolean isPlaying = false;
private SongsManager sm = null;
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
private int currentSongIndex = 0;
public Player(int currentSongIndex){
mp = new MediaPlayer();
mp.setOnCompletionListener(this);
sm = new SongsManager();
songsList = sm.getSongList();
this.currentSongIndex = currentSongIndex;
}
@Override
public void run() {
try{
mp.reset();
mp.setDataSource(songsList.get(currentSongIndex).get(SongsManager.KEY_PATH));
mp.prepare();
mp.start();
isPlaying = true;
} catch (IllegalArgumentException e){
e.printStackTrace();
} catch (IllegalStateException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
public synchronized void pause() {
if (isPlaying){
if (mp != null){
mp.pause();
isPlaying = false;
}
}
}
public synchronized void play() {
if (!isPlaying){
if (mp != null){
mp.start();
isPlaying = true;
}
}
}
...
}
所以,如果我像这样创建了一个新线程,
Player player = new Player(0);
playerThread = new Thread(player, Player.TAG);
playerThread.start();
并从另一个线程调用player.pause(),然后调用player.play(),播放器是否仍在单独的线程上运行?