当前位置: 首页 > 知识库问答 >
问题:

用于播放音乐的Android服务:为什么启动\u STICKY?

虞俊美
2023-03-14

我正在开发一个Android应用程序来播放音乐。

到目前为止,我已经从负责播放音乐的服务的onStartCommand返回了START\u STICKY,因为在Eclipse状态下使用工具提示:“此模式对[…]有意义播放背景音乐的服务”。

该方法所做的第一件事是查看意图,它应该做什么(播放、停止、下一首歌……)。

最近,当我在播放音乐时关闭应用程序(通过在最近的应用程序概述中将其从屏幕上拖出)时,应用程序崩溃。查看日志文件,我发现在尝试访问onStartCommand中的意图时引发了NullPointerException(在调用了应用程序和服务的onCreate方法之后)。

因此,我的第一个反射是在onStartCommand方法的开头插入:

if (intent == null){
    stopSelf();
    return START_NOT_STICKY;
}

但是在阅读了《开始粘性》(START\u STICKY)和《开始不粘性》(START\u NOT\u STICKY)的描述之后,我又想知道:为什么会推荐音乐播放器使用《开始粘性》(START\u STICKY)?

我的理解是,二者之间的区别在于,如果使用START\u STICKY启动的服务被终止,它将重新启动(然后使用intent=null)。使用START\u NOT\u STICKY服务将不会重新启动(除非用户请求),因此它将始终被有意调用,我不需要检查它是否为null。

当用户终止应用程序时,我很明显不应该重新启动该服务。

我能想到的另一种可能重新启动服务的情况是,如果服务由于缺乏资源而被系统杀死。在这种情况下,我也不认为用户会希望音乐意外地开始播放音乐,只是因为一些资源变得可用。

以下两个答案意味着返回代码除了在进程被终止时是否应重新启动服务之外没有其他意义:

  • 什么是START\u STICKY、START\u NOT\u STICKY和START\u REDELIVER\u INTENT Service
  • START\u STICKY和START\u NOT\u STICKY

为什么建议音乐播放器使用“START\u STICKY”(启动粘性)?

共有2个答案

颜君浩
2023-03-14

intSTART_STICKY:从onStartCommand(Intent, int, int)返回的常量:如果这个服务的进程在启动时被杀死(从onStartCommand(Intent, int, int)返回后),那么让它处于启动状态,但不要保留这个传递的意图。稍后系统会尝试重新创建服务。因为它处于启动状态,所以它会保证在创建新的服务实例后调用onStartCommand(Intent, int, int);如果没有任何挂起的启动命令要传递给服务,它将被调用一个空意图对象,所以你必须小心检查这一点。此模式适用于将显式启动和停止以运行任意时间段的事物,例如执行背景音乐播放的服务。

因此,这是自我解释,请参考此粘性服务

邢乐
2023-03-14

START\u STICKY如果服务因内存不足而停止,则在有足够内存可用时,在服务从内存不足恢复后,会重新创建服务。在这里,您将丢失以前可能计算过的结果。

START\u NOT\u STICKY-如果服务停止,则系统不必重新启动服务,即使它有足够的内存。

此外,当用户杀死应用程序时,服务不会停止,除非您使用一些任务杀手停止进程。有关服务的更多信息,请查看此链接。

http://www.vogella.com/tutorials/AndroidServices/article.html

 类似资料:
  • 我开发了一个音乐播放器应用程序,它使用前台服务,并在通知中使用远程视图来显示控件(播放/暂停、下一步、上一步)。当用户点击通知时,我如何对活动中显示的控件进行适当的更改,如搜索栏进度和当前歌曲的其他UI更新。

  • 问题内容: 我目前正在编写一些聊天程序,现在想通过客户端命令播放音乐,例如: 因此,链接将从发送歌曲的客户端发送到服务器。然后,服务器应 不 下载歌曲,而是将其流式传输到每个客户端(他们也不应下载)。问题是,我不知道如何通过基于TCP的连接流mp3。 我的问题是,是否有人可以向我提供我所需要的库/教程/思想/代码示例。 作为替代方案,直接从一个客户的计算机流式传输音乐也是可以的。如果我(作为客户端

  • 本文向大家介绍Android仿音乐播放器功能,包括了Android仿音乐播放器功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android仿音乐播放器功能的具体代码,供大家参考,具体内容如下 读取本地音乐文件 源代码: 时间格式转化类: 真机效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 如何控制Android或任何其他播放器的默认音乐播放器?通过控制,我的意思是暂停,播放,下一个等等。我必须绑定服务吗?我尝试使用,但它不起作用。当然有出路,因为我在Android市场上看到了控制音乐播放器的应用程序。任何想法?

  • 基于jPlyer开发的音乐播放插件. 支持如下功能: 1,进度条播放 。 2,上一首,下一首,随机播放 。 3,播放完每一首后,自动播放下一首,如果下一首是最后一首,则自动播放第一首。 4,支持鼠标滚动操作,能上下翻滚屏幕。 5,歌曲时间 倒计时 ,而不是从0开始计时。 效果演示地址: http://www.cssrain.cn/jPlayer/jPlayerV2.0/demo.html

  • 用ios自带的AVAudio实现的音乐播放器。可以播放存放在电脑里面的音乐文件,可以调整声音音量。播放的时候界面会有下雪的效果。可以作为练习动画和音频播放的例子。 [Code4App.com]