Demo代码,android studio平台可直接运行
点击打开Demo

  • Android技术生活-QQ交流群:723592501

开启前端服务步骤

  • 1.AndroidManifest.xml添加权限
    • 2. 继承 Service 复写onStartCommand
      • 4.在需要的地方开启Service
  • 1.Service的相关配置列表

1.AndroidManifest.xml添加权限

  1. AndroidManifest.xml添加权限
    <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

同时在里要注册服务

   <serviceandroid:name="com.yfz.myapplication.ForegroundServiceTest"android:foregroundServiceType="mediaProjection"android:enabled="true"></service>

2. 继承 Service 复写onStartCommand

private NotificationManager notificationManager;private Notification notification;private NotificationChannel notificationChannel;private final static String NOTIFICATION_CHANNEL_ID = "CHANNEL_ID";private final static String NOTIFICATION_CHANNEL_NAME = "CHANNEL_NAME";private final static int FOREGROUND_ID=1;@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {super.onStartCommand(intent, flags, startId);if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,NOTIFICATION_CHANNEL_NAME,NotificationManager.IMPORTANCE_HIGH);notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);notificationManager.createNotificationChannel(notificationChannel);}intent = new Intent(getApplicationContext(), MainActivity.class);  //点击通知栏后想要被打开的页面MainActivity.classPendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);  //点击通知栏触发跳转if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {notification = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID).setSmallIcon(R.mipmap.ic_launcher).setContentTitle("标题:测试文案").setContentText("内容:你好,点击打开app主页").setContentIntent(pendingIntent).build();}notification.flags |= Notification.FLAG_NO_CLEAR;startForeground(FOREGROUND_ID, notification);return Service.START_STICKY;}

4.在需要的地方开启Service

    Intent service = new Intent(getApplicationContext(), ForegroundServiceTest.class);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {this.startService(service);}

什么是前台服务?

前台服务是那些被认为用户知道(用户所认可的)且在系统内存不足的时候不允许系统杀死的服务。前台服务必须给状态栏提供一个通知,它被放到正在运行(Ongoing)标题之下——这就意味着通知只有在这个服务被终止或从前台主动移除通知后才能被解除。
官方描述:
A foreground service(前台服务) is a service that’s considered to be(被用户所认可的) something the user is actively aware of and thus not a candidate for(而不是一个候选的,可以在内存不足时,被系统杀死的) the system to kill when low on memory. A foreground service must provide a notification for the status bar(前台服务必须提供一个显示通知), which is placed under the “Ongoing” heading(它是不可以忽略的), which means that the notification cannot be dismissed unless the service is either stopped or removed from the foreground.(意思是通知信息不能被忽略,除非服务停止或主动移除,否则将一直显示。)


2.为什么要使用前台服务
在一般情况下,Service几乎都是在后台运行,一直默默地做着辛苦的工作。但这种情况下,后台运行的Service系统优先级相对较低,当系统内存不足时,在后台运行的Service就有可能被回收。
  那么,如果我们希望Service可以一直保持运行状态且不会在内存不足的情况下被回收时,可以选择将需要保持运行的Service设置为前台服务。

例:
App中的音乐播放服务应被设置在前台运行(前台服务)——在App后台运行时,便于用户明确知道它的当前操作、在状态栏中指明当前歌曲信息、提供对应操作。


服务相关内容

  • 1.AndroidManifest.xml添加权限
    • 2. 继承 Service 复写onStartCommand
      • 4.在需要的地方开启Service
  • 1.Service的相关配置列表

1.Service的相关配置列表

<service android:description="string resource"android:directBootAware=["true" | "false"]android:enabled=["true" | "false"]android:exported=["true" | "false"]android:foregroundServiceType=["connectedDevice" | "dataSync" |"location" | "mediaPlayback" | "mediaProjection" |"phoneCall"]android:icon="drawable resource"android:isolatedProcess=["true" | "false"]android:label="string resource"android:name="string"android:permission="string"android:process="string" >. . .
</service>

android:description
service的描述文字。

android:directBootAware
是否在用户解锁时直接启动。

android:enabled
是否可以被Android系统实例化。

android:exported
是否可以跟其他应用的组件直接交互。

android:foregroundServiceType
指定该服务是满足特定用例的前台服务。

android:icon
代表Service的图标。

android:isolatedProcess
如果设置为true,则此服务将在与系统其余部分隔离的特殊进程中运行,并且没有自己的权限,与它的唯一通信只能通过Service API(绑定和启动)。

android:label
可以显示给用户的服务标签。

android:name
实现Service子类的完全类名。

android:permission
访问Service必须的权限。

android:process
Service运行的进程名称。


相关引用文章:
作者:紫豪
链接:https://www.jianshu.com/p/5505390503fa

作者:老杨的互联网开发基地
链接:https://www.jianshu.com/p/cd6c703bc6ee

作者:Mars-xq
链接:https://blog.csdn.net/sinat_31057219/article/details/110004418

android-安卓如何开启前台服务?foregroundService的使用方法,什么是前台服务?相关推荐

  1. android7 强制gpu渲染,安卓手机开启强制GPU渲染功能的方法

    安卓手机怎么开启强制GPU渲染功能?安卓手机是目前市场占有率最多的智能手机系统,但是当用户使用搭载有安卓系统的手机后,我们就会发现随着使用时间的增加,手机速度就会变得越来越慢,其实这是安卓系统手机的通 ...

  2. iphone传输 android,安卓苹果数据互传,三种方法教你怎样把iPhone数据迁移到安卓手机...

    下面来看看这两大利器的操作方法: iphone数据迁移到安卓手机用i换机大师迁移备忘录: 如果你的新手机是EMUI 9.0之前的系统:备忘录的存放地址在:"文件管理文件夹>内部存储&g ...

  3. 【尝鲜】windows11免虚拟机直接安装Android安卓应用 - 安装Windows Subsystem for Android with Amazon Appstore的方法

    效果图 步骤 主要步骤 win11电脑开启虚拟机支持组件 安装官方的"Windows Subsystem for Android" 安卓子系统 开启安卓子系统,安装apk安卓应用程 ...

  4. android学习笔记---40_建立能与访问者进行相互通信的本地服务,后台运行的service

    40_建立能与访问者进行相互通信的本地服务 ------------------------------------------- 1.本地服务:如果服务和访问者在一个进程中那么就叫做本地服务.   ...

  5. 音频服务器未运行怎么办,音频服务未运行怎么办 音频服务未运行解决方法【详细介绍】...

    最近许多网友在使用电脑时遇到了"音频服务未运行"的错误提示,出现这种提示的原因有很多,症状也不尽相同.今天我们就针对不同的"音频服务未运行"症状进行分析解答,希 ...

  6. android 快传 源码_安卓APP仿茄子快传源码,Android项目源码类似茄子快传的快传项目包括服务端...

    适用范围:安卓APP仿茄子快传源码,Android项目源码类似茄子快传的快传项目包括服务端 演示地址:(以截图为准) 运行环境:Android+PC+web 其他说明: 本项目是一个基于安卓的类似茄子 ...

  7. Android安卓原生接入微信app支付PHP服务端

    Android安卓接入微信app支付PHP服务端 1.进入微信商户平台查看统一下单接口文档. 在查看完统一下单文档后,能够看到需要传递给微信"统一下单接口"地址的参数有哪些 统一下 ...

  8. Android手机哪个悬浮好用,安卓手机哪个悬浮窗便签好,是否支持云服务便签?...

    原标题:安卓手机哪个悬浮窗便签好,是否支持云服务便签? 安卓系统的手机品牌有很多,常见的比如有华为.小米.OPPO.vivo.魅族等等,这些手机上无一例外都有手机便签的功能,打开便签(备忘录)程序后, ...

  9. android自动启动无障碍服务,Xamarin.Android:如何开启无障碍服务永久

    我写的辅助服务,以避免USSD请求过程中AlertWindow开幕:Xamarin.Android:如何开启无障碍服务永久 [Service(Label = "BalanceAccessib ...

最新文章

  1. Java集合---LinkedList源码解析
  2. ViewPager实现滑动翻页效果
  3. node.js——麻将算法(三)胡牌相关明牌
  4. administrator用户不见了
  5. Javascript框架 - ExtJs - 类
  6. ECMAScript5新增Array方法forEach的实现
  7. Spring定时任务@Scheduled提前一秒执行
  8. 韵达开放接口php代码,韵达快递订单运输状态查询接口
  9. 20155204《网络对抗》Exp 6 信息搜集与漏洞扫描
  10. KEGG官方工具能够完成任何物种的KEGG注释!!!
  11. 面试记录_智慧职安环保科技有限公司
  12. Linux基础知识篇二
  13. MySQL中explain用法含义说明
  14. 51单片机延时程序的延时时间计算
  15. Python入门刷题第三天(类和对象和继承)
  16. Win7系统专业版调整屏幕亮度的详细教程--win7w.com
  17. 如何设置STM32的系统时钟(SYSCLK)
  18. 查询显卡状态 Tesla M40
  19. 跟着NC学作图 | 柱状图新画法 (环状柱状图)
  20. 数学表达式转换成python_简单数学表达式_清华尹成python入门教程_少儿编程视频-51CTO学院...

热门文章

  1. hex格式解析,合并hex
  2. lr常用函数(转载,防丢失)
  3. Android 手电筒 FlashLight
  4. 体素二值膨胀求解采样空间 binary voxel dilation in 3D space
  5. hive自定义函数-身份证号合法性判断
  6. SOC计算方法:卡尔曼滤波算法
  7. git clone 遇到问题:fatal: unable to access
  8. Linux下格式化U盘文件系统
  9. backtrader利用小时间粒度数据动态合成大时间粒度数据:replay功能
  10. 2017 数学建模 国赛(高教杯)-B题 “拍照赚钱”的任务定价