Android Service(服务)/进程/线程—服务(Service)_android service是进城还是线程-程序员宅基地

技术标签: android  Android  

这里重在谈谈我对几个常见概念的理解,至于他们的用法,网上多的很,这里就不赘述了。

1. 官网介绍

  1. 先来看看官方的说法:
    (1) Service介绍 https://developer.android.com/guide/components/services
    (2) Service的xml属性 https://developer.android.com/guide/topics/manifest/service-element
  2. Source Code说明
    frameworks/base/core/java/android/app/Service.java
/**
 * A Service is an application component representing either an application's desire
 * to perform a longer-running operation while not interacting with the user
 * or to supply functionality for other applications to use.  Each service
 * class must have a corresponding
 * {@link android.R.styleable#AndroidManifestService <service>}
 * declaration in its package's <code>AndroidManifest.xml</code>.  Services
 * can be started with
 * {@link android.content.Context#startService Context.startService()} and
 * {@link android.content.Context#bindService Context.bindService()}.
 * 
 * <p>Note that services, like other application objects, run in the main
 * thread of their hosting process.  This means that, if your service is going
 * to do any CPU intensive (such as MP3 playback) or blocking (such as
 * networking) operations, it should spawn its own thread in which to do that
 * work.  More information on this can be found in
 * <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and
 * Threads</a>.  The {@link androidx.core.app.JobIntentService} class is available
 * as a standard implementation of Service that has its own thread where it
 * schedules its work to be done.</p>

2. 解读

Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。

  1. Android Service是组件,既不能说它是单独的进程也不能说它是单独的线程。
    如果非要从通俗的语言层面来理解的话,姑且将其理解为对象。这个Service对象本身作为应用程序的一部分与它的调用者运行在相同的进程,当然如果指定了process则会运行到另外的进程。指定到其他进程的方法参加Service属性的"android:process"。

  2. Android Service可以在后台运行,不需要给用户提供任何的界面。但是Service是默认运行在主线程的,不要以为可以直接把它放在后台作耗时操作,如果要做耗时操作还是需要在Service里另起线程的,否则你懂得,会阻塞主线程造成ANR。

Q:那么问题来了:既然Service不能方便我们做后台耗时操作,要它何用,直接用线程不久可以替代了吗
A:提高它所在进程的优先级,尽量避免系统内存不足时被优先清除了。 (这里在文末会扩展说两句Android进程优先级)。
举个栗子:比如后台播放音乐,那么音乐播放器就是个后台进程,后台进程是容易被系统回收的,这样就可能出现听一会儿音乐突然没了,然后又要去重新打开播放器,但是如果音乐播放器开启了服务(记得新建线程哟)去播放音乐,后台播放器就不会那么容易被杀了。

至此应该就厘清了Service/线程/进程的关系。本文的主题已经聊完了,下一篇将会聊聊Service服务类型与IPC通信。

小结下本文的几点内容:

  1. Service是组件:默认运行在当前进程的主线程中的,如果需要执行耗时操作,记得在Service里创建新线程;
  2. Service用来提高优先级:在后台场景下,Service的优先级是高于后台挂起的Activity的,也高于Activity所创建的线程。这样的话,在内存不足时,Service不会被优先杀死。
Q:这里留个问题:Service可以在任何线程启动,那么当Service在子线程启动时,Service会运行在主线程还是子线程?

3. Android进程优先级

优先级由高到低: 前台进程 > 可见进程 > 服务进程 > 后台进程 > 空进程
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014294166/article/details/122024353

智能推荐

element ui输入框 placeholder字体样式修改_vue中修改elementui中placeholder的字体样式-程序员宅基地

文章浏览阅读6.4k次,点赞2次,收藏6次。element ui输入框 placeholder字体样式修改.el-input input::-webkit-input-placeholder { color:#AEABAB;}.el-input input::-moz-input-placeholder { color: #AEABAB;}.el-input input::-ms-input-placeholder { color:#AEABAB;}_vue中修改elementui中placeholder的字体样式

串口rs232转 Profinet 网关在钢铁行业的应用案例_串口转profinet模块-程序员宅基地

文章浏览阅读348次,点赞7次,收藏9次。系统实现:根据用户现场要求,每台 BX-602-PN 连接一台客户测距仪器,BX-602-PN 的 Profinet 端接入Profinet 总线网络,RS232 端口与测距仪的 RS232 端口连接(按照面板或者说明书指示接线),然后将测距仪的运行参数数据通过 BX-602-PN 映射到 S7-400PLC 的输入输出映射区,实现客户一台 PLC对现场 10 台测距仪设备的实时监控。应用简单,可在短时间内实现连接通信,该模块的串行口通信端口是完全透明的,不带任何协议,用户可以依照实际情况应用。_串口转profinet模块

springboot配置https访问_connector.setredirectport-程序员宅基地

文章浏览阅读2.2k次。1.首先去腾讯云或者阿里云申请免费ssl证书,以腾讯云为例,不建议自己生成,因为没办法测试发布环境的效果,填写个人信息,最后提示审核中才是申请成功,审核比较快,半小时就通过了。2.下载已经通过审核的证书文件夹,解压文件如下,根据项目选择使用,3.因为springboot使用的是内置tomcat,所以我这边选择tomcat文件,在resources目录下导入xxx.jks4.接下来配置properties文件,密码在同文件夹的keystorePass.txt中(腾讯云)5.个人比较喜欢yml格_connector.setredirectport

c++泛型编程-程序员宅基地

文章浏览阅读262次。template 函数模板定义关键字 用来定义函数参数的类型,参数类型有一个或多个,用逗号隔开,不能为空;模板参数表中,class\typename 没有任何区别,都是类型表示符号,可以随意替换。template > < 返回值类型 > < 函数名 >(< 参数表 >) {< 函数表 > }a = b;b = tmp;}

领导让小明找几家OA供应商,小明发过去,结果被骂工作不用心。-程序员宅基地

文章浏览阅读469次,点赞13次,收藏7次。OA是公司最常用的管理系统之一,难度系数 也不高,国内成熟的产品非常多,面对琳琅满目的产品该如何选择呢?本文为您解密。

安装ESIM事件相机模拟器遇到的一些问题及解决方法_failed << catkin_tools_prebuild:cmake [ exited wit-程序员宅基地

文章浏览阅读2.8k次。如果您的系统上尚未安装,请安装ROS。一行代码安装ROS的方法另一篇博文已经写过了点击此处我装的版本是ros的noetic,对应ubuntu20.04我们建议专门为模拟器创建一个新的 catkin 工作空间,如下所示:mkdir -p ~/sim_ws/src && cd ~/sim_wscatkin initcatkin config --extend /opt/ros/kinetic --cmake-args -DCMAKE_BUILD_TYPE=Releasevcsto_failed << catkin_tools_prebuild:cmake [ exited with code 1 ]

随便推点

用Jenkins Multi-branch Pipeline实现多分支构建和多环境部署_missing branch name for running a multi-branch pip-程序员宅基地

文章浏览阅读7k次。文章目录Jenkins Multi-branch Pipeline前言典型场景前置条件在GitHub上生成Personal Access Token在Jenkins中配置GitHub Personal Access Token新建Jenkins multi branch pipeline在GitHub中配置Webhook测试维护Jenkinsfile参考文档Jenkins Multi-branch Pipeline前言Jenkins Pipeline适合对一个分支进行构建,并部署到一个环境中。如果相_missing branch name for running a multi-branch pipeline

计算机怎么分硬盘,电脑分区怎么分_电脑分区怎么分合理-程序员宅基地

文章浏览阅读1.5k次。我们购买电脑整机后,开机就可以使用,但是磁盘分区数目以及设置的大小都是默认的,有时候默认分区的不合理,或者并不是你想要的大小,这就需要我们自己来进行分区了,那么电脑分区要怎么分的合理呢,下面小编给大家分享电脑分区分的合理的方法步骤。解决方法:1、首先,其中的主分区是能够安装操作系统,可写入计算机启动文件的分区。可以直接格式化,安装系统,存放文件。建议电脑硬盘分区最适宜的是分两个区,系统盘分比较大一..._电脑分区怎么分合理c,d,e,f

小程序使用AntV f2写双Y轴折线图及遇到的问题_f2-canvas y轴-程序员宅基地

文章浏览阅读2.8k次。1.根据官方文档仅有的部分内容,可知,不管是折线图,柱状图还是饼图,数据都要使用它规定的数据格式才可以。下面开始写我所用到的图表1.双Y轴双折线图的写法效果://注意部分:数据带有双引号,Y轴上不会从小到大排列const app = getApp()let chart = null;function initChart(canvas, width, height,) { // 使用 F2 绘制图表 const data =[{time:'07:00:00--07:59:69', kdj:2_f2-canvas y轴

java/php/node.js/python基于微信小程序的防疫物资管理【2024年毕设】-程序员宅基地

文章浏览阅读88次。springboot基于微信小程序的贵州美食推荐平台设计与实现。springboot基于Springboot的项目管理系统。springboot基于springboot的垃圾回收系统。springboot基于Vuejs的中国名茶销售平台。springboot巴黎奥运会论坛系统的设计与实现。springboot地产项目管控平台的设计与实现。springboot微信小程序的灾情救助共享系统。springboot基于小程序的微型教务系统。ssm基于web的暗香小店系统的设计与实现。

社交网络算法在金融反欺诈中的应用-程序员宅基地

文章浏览阅读3.5k次。社交网络算法在金融反欺诈中的应用互联网金融服务面临的欺诈风险社交网络算法在金融反欺诈中的应用 自动化风控系统架构互联网和金融的结晶金融的本质:资源的最合理化应用 互联网技术:交易的边界成本趋向“零”互联网金融:用大数据、云计算等技术实现的资金融通 、支付、投资和信息中介服务 个人对个人的信用贷款极速信任-自动化信用评估客户获取 –&amp;gt; 信用评估...

zabbix4.0学习六:Zabbix监控日志_zabbix eventlog-程序员宅基地

文章浏览阅读2.4w次,点赞2次,收藏47次。zabbix4.0学习六:Zabbix监控日志前言我们希望监控日志,在日志出现特定标识或字符串时打印出日志,并邮件通知我们,以便我们手动处理。(当然使用动作可自动处理)。zabbix能收集指定文件里的信息并展示出来。原理原理也很简单,zabbix-agent就是通过搜索指定文本文件里内容,通过正则表达式匹配关键字,如果匹配成功,则把该行信息主动发送给zabbix-server。由些延伸出..._zabbix eventlog