【安卓】Service生命周期与前台活动

文章目录

      • Service生命周期
      • 使用前台Service

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。

Service生命周期

  在项目的任何位置调用了Context的startService()方法,相应的Service就会启动,并回调onStartCommand()方法。如果这个Service之前还没有创建过,onCreate()方法会先于onStartCommand()方法执行。Service启动了之后会一直保持运行状态,直到stopService()或stopSelf()方法被调用,或者被系统回收。另外,虽然每调用一次startService()方法,onStartCommand()就会执行一次,但实际上每个Service只会存在一个实例。

  生命周期方法:

类 型方法名描述作 用
手动调用startService()启动服务
stopService()关闭服务
bindService()绑定服务
unbindService()解绑服务
自动调用onCreate()首次创建服务时,系统将调用此方法。如果服务已在运行,则不会调用此方法,该方法只调用一次。创建服务
onStartCommand()当另一个组件通过调用startService()请求启动服务时,系统将调用此方法。开始服务
onDestroy()当服务不再使用且将被销毁时,系统将调用此方法。销毁服务
onBind当另一个组件通过调用bindService()与服务绑定时,系统将调用此方法。绑定服务
onUnbind()当另一个组件通过调用unbindService()与服务解绑时,系统将调用此方法。解绑服务
onRebind()当旧的组件与服务解绑后,另一个新的组件与服务绑定,onUnbind()返回true时,系统将调用此方法。

在这里插入图片描述

  图源菜鸟教程。

使用前台Service

  服务几乎都是在后台运行的,它的系统优先级还是比较低的,当系统出现内存不足的情况时,就有可能会回收掉正在后台运行的服务。如果需要服务可以一直保持运行状态,而不会由于系统内存不足的原因导致被回收,就可以考虑使用前台服务。前台服务和普通服务最大的区别就在于,它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果。

  修改MyService中的代码。

	@SuppressLint("ForegroundServiceType")@Overridepublic void onCreate(){super.onCreate();Log.d("MyService", "onCreate executed");NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationChannel channel = new NotificationChannel("my_service", "前台Service通知", NotificationManager.IMPORTANCE_DEFAULT);manager.createNotificationChannel(channel);}Intent intent = new Intent(this, MainActivity.class);PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);Notification builder = new NotificationCompat.Builder(this, "my_service").setContentTitle("This is content title").setContentText("This is content text").setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)).setContentIntent(pi).build();startForeground(1, builder);}

  从Android 9.0系统开始,使用前台Service必须在AndroidManifest.xml文件中进行权限声明才行。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402070.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8/16 机器学习之逻辑回归

逻辑回归看起来是分类问题,但实际上还是建立数学函数模型计算最小化损失函数。 这里的模型就是根据数学知识建立其对应的概率函数

go注册到eureka微服务

// 注册到 Eureka,goeureka会自动30秒发送一次心跳 package mainimport ("fmt""github.com/SimonWang00/goeureka""github.com/gin-gonic/gin""github.com/robfig/cron/v3""time""wbGo/configs" )typ…

TCP机械臂测试

通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂 注意:关闭计算机的杀毒软件,电脑管家,防火墙 1)基于TCP服务器的机械臂,端口号是8888,ip是Windows的ip; 查看Windows的IP:按住Windowsr按键,输入cmd,输入ipconfig 2)点击软件中的开启监…

KubernetesMonitoring

监控集群中应用 监控集群本身 Control-Plane Components(api-server,coredns,kube-scheduler)Kubelet(cAdvisor)-暴露容器metricsKube-state-metrics-集群层面metrics(deployments,pods metrics)Node-exporter-Host相关metrics(cpu,mem,netw…

安防监控/视频汇聚平台EasyCVR如何配置,实现默认获取设备的子码流?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…

离线安装prometheus与Grafana实现可视化监控

简介 prometheus 是一个专为云环境设计的开源系统监控和警报工具,它收集并存储多维度的时间序列数据,通过PromQL查询语言提供强大的数据检索能力,并支持可视化及警报功能。而 Grafana 则是一个开源的数据可视化平台,能够与包括Pr…

基于Vue2使用x2js将JSON转换成XML、将XML转换成JSON

x2js源码地址GitHub - abdolence/x2js: x2js - XML to JSON and back for JavaScriptx2js - XML to JSON and back for JavaScript. Contribute to abdolence/x2js development by creating an account on GitHub.https://github.com/abdolence/x2js import x2js from x2js;//…

【RabbitMQ】SpringBoot整合RabbitMQ

对于RabbitMQ的开发,Spring方法提供了更为方便的操作. Spring官网介绍: Spring AMQP RabbitMQ官网介绍: RabbitMQ tutorial - "Hello World!" | RabbitMQ 引入依赖 为了方便测试也引入SpringWeb依赖. <dependencies><dependency><groupId>org.s…

三级_网络技术_18_路由器的配置及使用

1.在Cisco路由器上用于永久保存路由器的开机诊断程序、引导程序和操作系统软件的存储器是()。 Flash NVRAM RAM ROM 2.在Cisco路由器中主要用来永久保存路由器的开机诊断程序、引导程序和操作系统&#xff0c;以完成路由器初始化进程的存储器是()。 RAM Disk Flash RO…

[Spring] Spring事务与事务的传播

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

零基础学习大模型

揭秘大模型智能背后的神秘力量 前言 在这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面。其中&#xff0c;大模型&#xff08;LLM&#xff09;以其强大的语言处理能力和广泛的应用场景&#xff0c;成为了AI领域的一颗璀璨明珠…

Qt 使用阿里矢量图标库

前言 阿里矢量图标库非常好用&#xff0c;里面有各种丰富的图标&#xff0c;完全免费&#xff0c;还支持自定义图标&#xff0c;还可以将图标打包到一个项目中&#xff0c;使用起来非常方便。 第一步&#xff1a; 打开阿里矢量图标库 第二步&#xff1a; 搜索图标&#x…

pcl-滤波模块

点云需要滤波的原因 点云数据密度不规则需要平滑因为遮挡等问题造成离群点需要去除大量数据需要下采样噪音数据需要去除 1.直通滤波 对指定的某一维度实行简单的滤波&#xff0c;就是类似于2D处理中的画ROI&#xff0c;此滤波可以将x&#xff08;y和z&#xff09;在某一范围…

Datawhale X 魔搭 AI夏令营第四期 魔搭-AIGC方向 task03笔记

Datawhale官方的Task3链接&#xff1a;Task03 往期Task1、Task2链接&#xff1a;Task01&#xff0c; Task02 【学习者手册】&#xff1a;链接直达 【QA文档】&#xff1a;链接直达 【赛事官网】&#xff1a;链接直达 ComfyUI ComfyUI是一个基于深度学习的图像生成软件&…

【Linux操作系统】进程概念

目录 一、进程概念1.1 什么是进程 二、task_struct内容分类2.1 标识符2.2 进程状态2.2.1 进程排队2.2.2 关于进程状态的表述——运行、阻塞、挂起2.2.3 Linux中具体的进程状态2.2.4 孤儿进程 2.3 进程优先级 三、Linux的调度与切换3.1 进程切换3.2 进程调度 四、环境变量4.1 ma…

【Redis】Redis 数据类型与结构—(二)

Redis 数据类型与结构 一、值的数据类型二、键值对数据结构三、集合数据操作效率 一、值的数据类型 Redis “快”取决于两方面&#xff0c;一方面&#xff0c;它是内存数据库&#xff0c;另一方面&#xff0c;则是高效的数据结构。 Redis 键值对中值的数据类型&#xff0c;也…

C++练习备忘录

1. 保留两位小数输出格式 #include <iostream> #include <iomanip> using namespace std; int main() {double S 0;S (15 25) * 20 / 2;cout << fixed << setprecision(2) << S;return 0; }2. 设置输出宽度 #include <iostream> #inclu…

自研低代码海报制作平台学习分享计划

vue3组件库开发前面咱卷完了JuanTree组件&#xff0c;接下来一起来卷vue3低代码海报制作平台的基础组件实现。首先是拖拽基础组件的开发&#xff0c;整好把前面学习的知识点再运用进来。 文章目录 效果演示基本拖拽区域拖拽旋转其他效果待实现 录屏说明 看一步步实现的效果&…

【鸿蒙学习】HarmonyOS应用开发者基础 - 构建更加丰富的页面(一)

学完时间&#xff1a;2024年8月14日 一、前言叨叨 学习HarmonyOS的第六课&#xff0c;人数又成功的降了500名左右&#xff0c;到了3575人了。 二、ArkWeb 1、概念介绍 ArkWeb是用于应用程序中显示Web页面内容的Web组件&#xff0c;为开发者提供页面加载、页面交互、页面调…

python实现每天定时发送邮件

文章目录 步骤 1: 安装所需的库步骤 2: 编写发送电子邮件的 Python 脚本步骤 3: 配置电子邮件发送服务步骤 4: 运行脚本进一步扩展 要编写一个用于自动发送每日电子邮件报告的 Python 脚本&#xff0c;并配置它在每天的特定时间发送电子邮件&#xff0c;使用 smtplib 和 emai…