我想创建一个利用MediaBrowserService功能的MusicPlayer应用程序。 在通过MediaBrowserServiceCompat的文档时,我意识到它是Service的子类,这意味着它在Application的主UI线程上运行。
但是,由于音乐播放器是一项长期运行的任务,我认为最好将其作为IntentService
来实现,而不是作为服务。
所以我想问:
我应该在哪里实施MusicPlayer服务?
我应该在MediaBrowserServiceCompat
实施中实施吗?但它不会在UI线程上过重吗?
或者我应该将其作为IntentService
&从我的MediaBrowserServiceCompat中调用它?但它似乎有点复杂。
这是我最初的code structure
请建议。
谢谢
答案 0 :(得分:1)
我写的音乐播放器使用后台服务播放歌曲。
这种方法的问题在于,在小米或华为这样的设备上,这些服务被杀死,以便拯救"电池寿命。我想你能做的最好的事情就是当你的服务被杀死时你可以重新启动它并再次启动歌曲......
这就是我提出的解决方案,如果有人有更好的想法,我很乐意听到它。
答案 1 :(得分:1)
您应该将Service用作音乐播放器应用的命令管理器。应将所有播放,暂停,下一个和其他播放控件发送到服务,并且服务将相应地委托它。 Android https://www.npmjs.com/package/custom-properties-sass也有异步方法和相关的侦听器来通知调用者。请查看MediaPlayer。 请关注音乐播放器it的Google示例代码,该代码可以很好地解决基本的音乐播放器功能。
答案 2 :(得分:0)
错误:
我意识到它是Service的子类,这意味着它可以运行 应用程序的主要UI线程。
Doc清楚地说:
Service是一个可以执行长时间运行的应用程序组件 在后台运作
它还说如果你需要某种长时间的任务,你应该实现为 Foreground Service 。
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);