首页 > 其他分享 >【安卓】Service生命周期与前台活动

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

时间:2024-08-15 10:56:58浏览次数:15  
标签:生命周期 服务 Service 安卓 调用 前台 onCreate 方法

文章目录


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

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")
    @Override
    public 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文件中进行权限声明才行。

在这里插入图片描述

标签:生命周期,服务,Service,安卓,调用,前台,onCreate,方法
From: https://blog.csdn.net/qq_47658735/article/details/141216864

相关文章

  • 给安卓 app 添加权限的一种方法
    依赖两个app官方文档一个是Shizuku,可以直接安装另一个是AppOps,需要通过adb安装#通过adb启动Shizuku服务adbshellsh/sdcard/Android/data/moe.shizuku.privileged.api/start.sh#安装AppOpsadbinstall-i'com.android.vending'appops-v9.0.7.r1708.5......
  • uniapp+uView安卓与IOS微信与支付宝支付
    页面仅供参考,记录支付流程处理方法:<template> <viewclass="pay-order-page">  <viewclass="content-box"style="padding-bottom:14rpx;">   <viewclass="tip-box"v-if="detail.purchaseLimitNum>0&qu......
  • 在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
    在Kubernetes(K8s)中,Service是一种抽象,它定义了一组逻辑上相同的服务实例(即Pod)以及访问它们的策略。Service可以将外部客户端的流量路由到后端的一个或多个Pod。Kubernetes提供了几种不同类型的Service,每种都有其特定的用途:ClusterIP描述:这是默认的Service类型。Cl......
  • 安卓笔记—binder
    binder的c实现代码我没有读,下面的笔记都是从文章中学习的https://elinux.org/Android_Binderbinder有哪些功能?跨进程传输数据,跨进程传递时机。进程是分配内存的最小单位,因此进程间不共享内存。但是内核与进程之间是一对多的关系,也就是一个内核对应多个进程,因此binder......
  • Oracle 19c通过recover standby database from service修复GAP案例
    案例介绍环境介绍操作系统:RedHatEnterpriseLinuxrelease8.10(Ootpa)数据库版本:Oracle19.23.0.0.0上周五,系统管理员需要给Linux升级补丁,UAT环境下的一套DG,数据库没有正常关闭的情况下,操作系统升级补丁后强制reboot了,周一早上处理的过程中遇到下面错误:备库的告警日......
  • 安卓开发中的AppCompat框架
    在安卓开发中,AppCompat框架是一个极为重要的组件,它起源于AndroidSupportLibrary中的v7兼容包,现已迁移到AndroidX架构体系下的androidx.appcompat模块。AppCompat框架的主要目的是为了解决Android设备多样化和系统版本碎片化带来的问题,确保应用在不同版本的Android系统上提供......
  • [Spring]Bean生命周期
    生命周期的概要流程Bean的生命周期概括起来就是4个阶段:实例化(Instantiation)属性赋值(Populate)初始化(Initialization)销毁(Destruction)实例化:第1步,实例化一个bean对象;属性赋值:第2步,为bean设置相关属性和依赖;初始化:第3~7步,步骤较多,其中第5、6步为初始化操作......
  • 安卓手机使用Termux搭建Hexo博客网站并发布公网远程访问实战教程
    文章目录前言1.安装Hexo2.安装cpolar3.远程访问4.固定公网地址前言本文主要介绍如何在安卓手机平板中使用Termux安装个人hexo博客并结合cpolar内网穿透工具配置公网地址,实现无公网IP环境也能随时随地远程访问本地搭建的网站。Hexo是一个用Nodejs编写的快速、简......
  • C# 创建 Windows Service 项目
    C#创建WindowsService服务项目空白处,右键选择“添加安装程序”可以看到两个控件,点击右击第一个控件,打开属性设计器,将其中的Account设置为LocalSystem(本地服务),接下来,右击上面的第二个控件,打开属性界面,设置ServiceName,和将其中的StratType设置为Automatic,publicpartia......
  • 使用adb命令安装安卓apk包
       虽然网上也有许多adb安装安卓包的教程,但经过自己亲自试了一下后,觉得自己写下来的才是自己的收获。一、下载安装adb工具    下载地址有很多,这里是我下载的地址:https://pan.baidu.com/s/1mgGkNZM,下载文件比较齐全。    下载后是个压缩包,解压后一共有5......