我有一个重叠的线程在我的android mp3播放器中播放音乐的问题(我认为)。我有一个SongList.java类,它在单击某个项目时列出并播放音乐,还有一个ArtistList.java,它意图使SongList播放该特定艺术家的歌曲。如果两首或多首歌曲不在同一活动中,则它们将同时播放。
我如何告诉我的playSong方法停止所有线程,但停止最近的线程?
最佳答案
您应该只有一个线程或服务可以进行播放。SongList
和ArtistList
不应启动新服务。而是应该有一个PlaybackService
,您可以传递SongList
或ArtistList
作为参数/自变量。如果这样做的话,您应该只有一个线程来进行播放,并且绝对不会遇到这种麻烦。
在这里看看:
http://developer.android.com/guide/topics/media/mediaplayer.html#mpandservices
他们实现了一个Service
,该MediaPlayer
使用MusicPlaybackService
中的内置文件进行音频播放。接下来,您可以将Binder
绑定到活动。
这里是一个介绍:
http://developer.android.com/guide/components/bound-services.html
您可以指定活动可以在playSongs(SongList songs)
的帮助下在您的服务上调用的方法。因此,您可以提供一种类似playArtists(ArtistList list)
或MediaPlayer
的方法,该方法可以由活动调用(即,通过单击某个按钮)。由于该服务运行回放(通过使用playSongs(SongList songs)
),因此该服务负责线程和回放。因此,如果您调用该服务的MediaPlayer
,则该服务应停止MediaPlayer
并使用所需的音乐文件(由SongList
提供)重新启动MusicPlaybackService
。通过这种方法,您的可以管理播放,并确保仅同时播放一个音乐文件。