我想要创建一个利用MusicPlayer特性的MediaBrowserService应用程序。在浏览MediaBrowserServiceCompat的文档时,我意识到它是服务的一个子类,这意味着它运行在应用程序的主UI线程上。
但是,由于音乐播放器是一项长期运行的任务,我认为最好将其实现为IntentService,而不是服务。
所以我想问:
MediaBrowserServiceCompat实现中实现它吗?但是它不会对UI线程造成太大负担吗?IntentService &从我的MediaBrowserServiceCompat调用它?但这似乎有点复杂。这是我最初的码结构
请建议一下。
谢谢
发布于 2017-10-15 16:18:05
我写的音乐播放器使用后台服务来播放歌曲。
这种方法的问题在于,在小米或华为这样的设备上,为了“节省”电池寿命,这些服务被取消了。我想你能做的最好的就是当你的服务被杀了,你可以重新启动它,然后再开始.
这就是我想出的解决办法,如果有人有更好的主意,我很想听听。
发布于 2017-10-15 20:12:40
您应该使用Service作为音乐播放器应用程序的命令管理器。所有播放、暂停、下一次播放和其他播放控件都应该发送到服务中,并且服务将相应地委托它。此外,Android MediaPlayer还有异步方法和相关侦听器来通知调用方。请看一下它。请遵循谷歌音乐播放器https://github.com/googlesamples/android-UniversalMusicPlayer的示例代码,它很好地解决了基本的音乐播放器功能。
发布于 2017-10-09 06:25:50
错误:
我意识到它是Service的子类,这意味着它运行在Application的主UI线程上。
医生清楚地说:
服务是一个应用程序组件,可以在后台执行长期运行的操作。
它还说,如果您需要某种长时间的任务,您应该实现为前台服务。
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent =
PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification =
new Notification.Builder(this, CHANNEL_DEFAULT_IMPORTANCE)
.setContentTitle(getText(R.string.notification_title))
.setContentText(getText(R.string.notification_message))
.setSmallIcon(R.drawable.icon)
.setContentIntent(pendingIntent)
.setTicker(getText(R.string.ticker_text))
.build();
startForeground(ONGOING_NOTIFICATION_ID, notification);https://stackoverflow.com/questions/46635651
复制相似问题