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