我正在开发一个应用程序,使用MediaPlayer类播放Steam音频。 我将其主要(播放器)活动声明为SingleTop。 此外,在按钮“返回”上,它会执行moveTaskToBack(true)
,这与按钮“Home”所做的相同。 因此,它只停留在后台并播放,如果用户想查看GUI,则只需再次启动应用程序(这不太方便)或单击特殊应用程序的通知。 通过菜单提供退出。
但是,在这种情况下使用服务的好处是什么? 肯定更复杂,我必须说。 即使在“后台”时实例化GUI也需要更多时间,我担心。
我正在开发一个应用程序,使用MediaPlayer类播放Steam音频。 我将其主要(播放器)活动声明为SingleTop。 此外,在按钮“返回”上,它会执行moveTaskToBack(true)
,这与按钮“Home”所做的相同。 因此,它只停留在后台并播放,如果用户想查看GUI,则只需再次启动应用程序(这不太方便)或单击特殊应用程序的通知。 通过菜单提供退出。
但是,在这种情况下使用服务的好处是什么? 肯定更复杂,我必须说。 即使在“后台”时实例化GUI也需要更多时间,我担心。
来自Android文档:
活动 活动代表具有用户界面的单个屏幕。例如,电子邮件应用程序可能有一个显示新邮件列表的活动,另一个用于撰写电子邮件的活动,以及用于阅读电子邮件的另一个活动。
服务 服务是在后台运行以执行长时间操作或为远程进程执行工作的组件。服务不提供用户界面。例如,服务可能会在用户处于另一个应用程序时在后台播放音乐,或者它可能会在不阻止与活动交互的情况下通过网络获取数据。另一个组件(例如活动)可以启动服务并让其运行,或者绑定到它以与其交互。
此外
一旦启动,服务可以无限期地在后台运行,即使启动它的组件被销毁。
如果Android操作系统资源不足,它可以销毁您的Activity,但不会销毁服务。
编辑: 你应该使用startForeground()
来确保在资源不足的情况下您的Service
不会被杀死。从文档中可以看到:
使此服务在前台运行,提供正在进行的通知以显示给用户。默认情况下,服务是后台运行的,这意味着如果系统需要杀死它们以回收更多内存(例如在Web浏览器中显示大页面),则它们可以被杀死而不会造成太大的损害。如果您的服务正在执行背景音乐播放等任务,而杀死您的服务会对用户产生影响,则可以设置此标志,以便用户注意到他们的音乐停止播放。
startForeground()
。 - Ovidiu Latcu