Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android服务(在后台继续运行)_Android_Android Service - Fatal编程技术网

android服务(在后台继续运行)

android服务(在后台继续运行),android,android-service,Android,Android Service,我对安卓服务有些困惑 根据文件 它将在主线程的后台继续运行。它不会在不同的线程中运行 我的疑问是,在后台继续跑到底是什么意思。它会一次又一次地执行onStartCommand()。我真的很困惑这一行(继续在后台运行) 如果它不会一次又一次地执行onStartCommand,那么继续运行的好处是什么?如果它一次又一次地执行onStartCommand,那么它正在越来越多地使用cpu 让我困惑的线条在图片中突出显示,请看一看 服务在应用程序的线程上运行,启动后会一直运行,直到调用finish()或a

我对安卓服务有些困惑 根据文件 它将在主线程的后台继续运行。它不会在不同的线程中运行

我的疑问是,在后台继续跑到底是什么意思。它会一次又一次地执行onStartCommand()。我真的很困惑这一行(继续在后台运行)

如果它不会一次又一次地执行onStartCommand,那么继续运行的好处是什么?如果它一次又一次地执行onStartCommand,那么它正在越来越多地使用cpu

让我困惑的线条在图片中突出显示,请看一看

服务在应用程序的线程上运行,启动后会一直运行,直到调用finish()或android需要内存为止

但运行并不意味着它正在处理某些东西。只有当有人对您的服务调用startService()时,才会调用onStartCommand()

因此,服务不是始终运行,而是始终在内存中,随时准备在需要时运行。该服务的主要用途是进行一些处理,即使您更改了活动,这些处理也会保持运行,例如,当您更改活动以查找下一个要播放的音乐时,音乐播放器会一直播放

编辑:在文档中“服务不是一个单独的进程……服务不是一个线程。它本身不是一种脱离主线程工作的方法”。 服务是“应用程序告诉系统它想在后台做什么的工具”

服务既可以启动,也可以绑定连接。在这种情况下,只要服务启动,或者有一个或多个带有Context.BIND_AUTO_CREATE标志的连接,系统就会保持服务运行。一旦这两种情况都不成立,服务的onDestroy()方法,服务将有效终止。“


服务在应用程序的线程上运行,启动后会一直运行,直到调用finish()或android需要内存为止

但运行并不意味着它正在处理某些东西。只有当有人对您的服务调用startService()时,才会调用onStartCommand()

因此,服务不是始终运行,而是始终在内存中,随时准备在需要时运行。该服务的主要用途是进行一些处理,即使您更改了活动,这些处理也会保持运行,例如,当您更改活动以查找下一个要播放的音乐时,音乐播放器会一直播放

编辑:在文档中“服务不是一个单独的进程……服务不是一个线程。它本身不是一种脱离主线程工作的方法”。 服务是“应用程序告诉系统它想在后台做什么的工具”

服务既可以启动,也可以绑定连接。在这种情况下,只要服务启动,或者有一个或多个带有Context.BIND_AUTO_CREATE标志的连接,系统就会保持服务运行。一旦这两种情况都不成立,服务的onDestroy()方法,服务将有效终止。“


如评论中所述,出于您的特殊目的(监控设置,此处:音量),您可以采用非轮询方法,如以下所述:

一般来说,在像Android这样的现代(虽然不是完美的)环境中,几乎没有理由积极地进行投票,因为没有人能负担得起浪费这么多资源,而且,你总是有错过活动的风险,所以你会更频繁地进行投票——这是一场你的实现永远都会失败的竞赛

同样,以下陈述是完全错误的:

  • 服务在应用程序的主/UI线程上运行。如果您认为是这种情况,那么您需要了解清单的
    活动
    标记的属性。也。即使您不让服务在单独的进程中运行,在应用程序的主/UI线程上运行的服务这一短语也表明您的主/UI线程被您的服务阻塞。当然,希望没有人离开物联网艺术;只需在应用程序的主/UI线程上处理服务事件并将任务委托给工作线程就很容易了,这是每个sane实现都应该做的

  • 使用
    START\u STICKY
    ,您可以确保您的服务在启动后始终运行。当然,这是幼稚的,这意味着任何声称这一点的人都没有完全理解该标志的含义以及对该标志的描述。Quote:
    注意,这意味着在您的服务运行的大部分时间,如果内存压力过大,它可能会被系统终止。
    如果您阅读本节,你会知道,如果Android需要内存来完成另一项具有更高优先级的任务,并且你的服务与用户当前查看的应用程序无关,那么它随时都会在没有通知的情况下使用你正在运行的服务终止进程。换句话说,如果系统内存不足,用户打开一个需要系统大部分内存的电子表格,那么背景互联网广播媒体播放器和所有花哨的东西很可能会被杀死


如评论中所述,出于您的特殊目的(监控设置,此处:音量),您可以采用非轮询方法,如下所述:

一般来说,在像Android这样的现代(虽然不是完美的)环境中,几乎没有理由积极地进行投票,因为没有人能负担得起浪费这么多资源,而且,你总是有错过活动的风险,所以你会更频繁地进行投票——这是一场你的实现永远都会失败的竞赛

同样,以下陈述是完全错误的:

  • 服务在应用程序的主/UI线程上运行。如果你