android前台服务

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。

专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

未经允许不得转载

目录

  • 一、导读
  • 二、使用
    • [2.1 添加权限](#2.1 添加权限)
    • [2.2 新建一个服务](#2.2 新建一个服务)
    • [2.3 构建通知消息](#2.3 构建通知消息)
    • [2.4 启动与停止服务](#2.4 启动与停止服务)
  • [三、 推荐阅读](#三、 推荐阅读)

一、导读

我们继续总结学习基础知识,温故知新。

今天记录下android前台服务(Foreground Service),我们知道服务可以分成好几类,

前台服务(Foreground Service)是一种在 Android 应用程序中执行长时间运行任务的服务类型。

与普通的后台服务不同,前台服务在系统通知栏中显示一个可见的通知。

二、使用

前台服务通常用于执行用户可感知的任务,例如播放音乐、下载文件、进行定位更新等。

通过将服务置于前台状态并显示通知,前台服务可以避免被系统误认为是低优先级的后台任务,从而更好地确保服务的稳定运行。

但是,需要注意的是,使用前台服务可能会增加应用程序的电池消耗,因为持续运行任务需要持续的系统资源。

我们就一起来看看如何使用一个前台服务:

2.1 添加权限

xml 复制代码
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

不添加的话就会报错啦

java.lang.SecurityException: Permission Denial:

startForeground from pid=2, uid=1 requires android.permission.FOREGROUND_SERVICE.

2.2 新建一个服务

java 复制代码
public class DataService extends Service {

    ServiceBinder binder;


    public DataService() {
    }

    public void onCreate() {
    }

    @Override
    public IBinder onBind(Intent intent) {

        if(binder == null) {
            binder = new ServiceBinder(this);
        }

        return binder;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        handler = new InnerHandler(this);
        initPos();
        return super.onStartCommand(intent, flags, startId);
    }
    
}

2.3 构建通知消息

构建通知消息,一般在服务启动时就构建一个通知栏出来,在onCreate 、onStartCommand都行

java 复制代码
    public int onStartCommand(Intent intent, int flags, int startId) {
      Notification.Builder builder = new Notification.Builder(this.getApplicationContext()); //获取一个Notification构造器
      Intent nfIntent = new Intent(this, MainActivity.class);
      
      builder.setContentIntent(PendingIntent.
        getActivity(this, 0, nfIntent, 0)) // 设置PendingIntent
        .setLargeIcon(BitmapFactory.decodeResource(this.getResources(),
          R.mipmap.ic_large)) // 设置下拉列表中的图标(大图标)
        .setContentTitle("下拉列表中的Title") // 设置下拉列表里的标题
        .setSmallIcon(R.mipmap.ic_launcher) // 设置状态栏内的小图标
        .setContentText("要显示的内容") // 设置上下文内容
        .setWhen(System.currentTimeMillis()); // 设置该通知发生的时间
      
      Notification notification = builder.build(); // 获取构建好的Notification
      notification.defaults = Notification.DEFAULT_SOUND; //设置为默认的声音
            startForeground(NOTIFICATION_ID, notification);
     
      return super.onStartCommand(intent, flags, startId);
    }

Notification创建完后,就调用 startForeground(NOTIFICATION_ID, notification);让Android服务运行在前台。

2.4 启动与停止服务

startForeground(NOTIFICATION_ID, notification);让Android服务运行在前台。

stopForeground(true);// 停止前台服务--参数:表示是否移除之前的通知

三、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

未经允许不得转载

相关推荐
Y多了个想法30 分钟前
RK3568 android11 适配敦泰触摸屏 FocalTech-ft5526
android·rk3568·触摸屏·tp·敦泰·focaltech·ft5526
NotesChapter2 小时前
Android吸顶效果,并有着ViewPager左右切换
android
_祝你今天愉快3 小时前
分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.
android
暮志未晚Webgl3 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
麦田里的守望者江3 小时前
KMP 中的 expect 和 actual 声明
android·ios·kotlin
Dnelic-4 小时前
解决 Android 单元测试 No tests found for given includes:
android·junit·单元测试·问题记录·自学笔记
佛系小嘟嘟4 小时前
Android Studio不显示需要的tag日志解决办法《All logs entries are hidden by the filter》
android·ide·android studio
mariokkm4 小时前
Django一分钟:django中收集关联对象关联数据的方法
android·django·sqlite
长亭外的少年4 小时前
如何查看 Android 项目的依赖结构树
android
深海呐6 小时前
Android 从本地选择视频,用APP播放或进行其他处理
android·音视频·从本地选择视频,用app播放·从本地选择视频,并拿到信息·跳转到本地视频列表