安卓四大组件:Service

Android 多个service的action 相同冲突 验证demo Android 多个service的action 相同冲突 验证demo,对应博客地址是http://blog.youkuaiyun.com/czlove110/article/details/50791390 立即下载

简介

提供后台长期运行的服务(复杂计算、音乐播放、下载等)

类型

按运行地点分类

本地服务LocalService:
运行在主线程,主线程结束,服务也结束
因为运行在主线程,通信方便

远程服务RemoteService:
运行在独立进程,服务常驻后台,不受Activity影响

按运行类型分类

前台服务:
在通知栏显示通知(用户可看到)
服务时,需要用户知道并进行相关操作(服务终止时,通知栏通知也会消失)

后台服务:
后台(用户无法看到)
类似天气、时间更新等,无需用户知道或操作的任务

按功能分类

不可通信的后台服务:
用startService()启动,调用者退出后service仍然存在
服务不需与Activity或Service通信

可通信的后台服务:
①用bindService()启动,调用者退出后,随之销毁
②用startService()、bindService()启动,随之销毁

使用

本地Service

创建子类继承Service类

public class MyService extends Service {

//启动Service之后,就可以在onCreate()或onStartCommand()方法里去执行一些具体的逻辑
    @Override
    public void onCreate() {
        super.onCreate();
        System.out.println("执行了onCreat()");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        System.out.println("执行了onStartCommand()");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("执行了onDestory()");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

需要重写上述方法

构建用于启动Service的Intent对象

//构建启动服务的Intent对象
Intent startIntent = new Intent(this, MyService.class);

//构建停止服务的Intent对象
Intent stopIntent = new Intent(this, MyService.class);

调用startService()启动Service,调用stopService()停止服务

//调用startService()方法-传入Intent对象,以此启动服务
startService(startIntent);
//调用stopService()方法-传入Intent对象,以此停止服务
stopService(stopIntent);

在AndroidManifest中注册Service

//注册Service服务
<service android:name=".MyService">
</service>

注:通常在service的onCreate和onStartCommand中执行具体逻辑

可通信Service

构造Service类

public class MyService extends Service {

    private MyBinder mBinder = new MyBinder();

    @Override
    public void onCreate() {
        super.onCreate();
        System.out.println("执行了onCreat()");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        System.out.println("执行了onStartCommand()");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("执行了onDestory()");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        System.out.println("执行了onBind()");
        //返回实例
        return mBinder;
    }


    @Override
    public boolean onUnbind(Intent intent) {
        System.out.println("执行了onUnbind()");
        return super.onUnbind(intent);
    }

    //新建一个子类继承自Binder类
    class MyBinder extends Binder {

        public void service_connect_Activity() {
            System.out.println("Service关联了Activity,并在Activity执行了Service的方法");
        }
    }
}

相比于本地Service多了Binder对象及其bind、unbind方法

服务实际使用

    private MyService.MyBinder myBinder;

    //创建ServiceConnection的匿名类
    private ServiceConnection connection = new ServiceConnection() {

        //重写onServiceConnected()方法和onServiceDisconnected()方法
        //在Activity与Service建立关联和解除关联的时候调用
        @Override
        public void onServiceDisconnected(ComponentName name) {
        }

        //在Activity与Service关联的时候调用
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //实例化Service的内部类myBinder
            //通过向下转型得到了MyBinder的实例
            myBinder = (MyService.MyBinder) service;
            //在Activity调用Service类的方法
            myBinder.service_connect_Activity();
        }
    };

获取binder实例,并且设置关联建立、销毁时处理

Intent startIntent = new Intent(this, MyService.class);
//调用startService()方法-传入Intent对象,以此启动服务
startService(startIntent);

Intent stopIntent = new Intent(this, MyService.class);
//调用stopService()方法-传入Intent对象,以此停止服务
stopService(stopIntent);

Intent bindIntent = new Intent(this, MyService.class);
bindService(bindIntent,connection,BIND_AUTO_CREATE);
//参数说明
//第一个参数:Intent对象
//第二个参数:上面创建的Serviceconnection实例
//第三个参数:标志位
//这里传入BIND_AUTO_CREATE表示在Activity和Service建立关联后自动创建Service
//这会使得MyService中的onCreate()方法得到执行,但onStartCommand()方法不会执行

//调用unbindService()解绑服务
//参数是上面创建的Serviceconnection实例
unbindService(connection);

前台Service

前台Service优先级高于后台Service

具体使用:

@Override
    public void onCreate() {
        super.onCreate();
        System.out.println("执行了onCreat()");

        //添加下列代码将后台Service变成前台Service
        //构建"点击通知后打开MainActivity"的Intent对象
        Intent notificationIntent = new Intent(this,MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,notificationIntent,0);

        //新建Builer对象
        Notification.Builder builer = new Notification.Builder(this);
        builer.setContentTitle("前台服务通知的标题");//设置通知的标题
        builer.setContentText("前台服务通知的内容");//设置通知的内容
        builer.setSmallIcon(R.mipmap.ic_launcher);//设置通知的图标
        builer.setContentIntent(pendingIntent);//设置点击通知后的操作

        Notification notification = builer.getNotification();//将Builder对象转变成普通的notification
        startForeground(1, notification);//让Service变成前台Service,并在系统的状态栏显示出来

    }

相比原有Service类,在onCreate中修改即可(该效果为点击前台按钮后,启动MainActivity)

使用场景

本地服务
执行需要依赖于某个进程的服务(如音乐播放)

远程服务
系统级别服务

前台服务
需要让用户知道并执行相关操作(音乐播放器等)

后台服务
无需用户知晓相关信息

不可通信的后台服务
长期在后台运行,无需与Activity、Service通信(startService()启动)

可通信的后台服务
后台服务需要通信(如控制服务开始等)(使用bindService()启动,第一次调用才会创建实例运行服务,节约系统资源)

注

Service:运行于主线程,故不可做耗时操作(可以在Service中创建工作线程进行操作),不依赖UI/Activity,只要进程在,Service就一直运行
Thread:运行于工作线程,需要依赖于Activity(与Activity共亡)
由上述可知,两者通常结合使用,在Service中将耗时操作托付给Thread创建子线程执行

@Override  
public int onStartCommand(Intent intent, int flags, int startId) {  
//新建工作线程
    new Thread(new Runnable() {  
        @Override  
        public void run() {  
            // 开始执行后台任务  
        }  
    }).start();  
    return super.onStartCommand(intent, flags, startId);  
}  
  
class MyBinder extends Binder {  
    public void service_connect_Activity() {  
  //新建工作线程
        new Thread(new Runnable() {  
            @Override  
            public void run() {  
                // 执行具体的下载任务  
            }  
        }).start();  
    }  
}  
halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划 halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划 前言 本人近期在工作中遇到需要对某场景下利用海康相机进行图像缺陷检测与对应路径规划。通过对海康相机示例代码进行吸收与借鉴,最终实现了对海康相机的控制,并增加HSmartWindowControl控件,实现图像的实时显示与平移缩放功能;通过listview+toolstrip实现日志显示与类型(提示、警告、错误)分类;同时自行编制算法实现对缺陷的识别以及缺陷外扩矩形范围内的路径规划。 1.日志记录 代码如下(示例): 阅读详情

相关推荐

SeetaFace6人脸活体检测C++代码实现Demo

活体检测是判断人脸图像是来自真人还是来自攻击假体(照片、视频等)的方法。 人脸识别系统存在被伪造攻击的风险。因此需要在人脸识别系统中加入活体检测,验证用户是否为真实活体本人操作,以防止照片、视频、以及三维模型的入侵,从而帮助用户甄别欺诈行为,保障用户的利益。

mickey2007的博客 3468

Service总结

1. 一个Service基本上有两种形式: 被启动(Started) 当应用程序组件(如一个Activity)通过调用startService()方法启动的服务是“被启动(started)”的。服务一旦启动,它就能够无限期的在后台运行,即使启动它的组件被销毁。通常,一个被启动的服务之星一个单一操作,并且不给调用者返回结果。例如,这个服务可能在网络上下载或上传文件。当操作完成的时候,服务应该自己

yzx41099296的专栏 694

2026年4月AI爆发周:阿里连推三款模型、字节全双工语音上线,国内大模型进入“落地竞速“新阶段

**摘要:**2026年4月初,国内AI大模型迎来密集发布,阿里、字节、腾讯分别推出新产品。阿里一周发布三款模型,覆盖通用推理、多模态轻量化和长文档处理,API价格大幅下降;字节推出全双工语音模型,实现实时交互,技术难度高;腾讯混元3.0强调工程化和生态整合,面向企业私有化部署。趋势显示,行业从性能竞赛转向落地竞赛,多模态成为主战场,API成本降低,开发者选择更丰富。国内大模型竞争重点转向实际应用和生态整合。

weixin_45526015的博客 1万+

Android学习笔记(五一):服务Service(上)- IntentService

对于需要长期运行,例如播放音乐、长期和服务器的连接,即使已不是屏幕当前的activity仍需要运行的情况,采用服务方式。服务将通过API触发启动或者通过IPC(Interprocess Communication)连接请求触发启动。服务将一直运行直至被关闭,或者内存不足时由系统关闭。一般而言,为了节省电量,服务应进行优化减少CPU的消耗和大量网络通信。服务可用于以下的场景: 1、用户离开ac...

kerlubasola 389

Nvivo12新手避坑指南:从安装到编码的完整流程(附实战案例)

本文为Nvivo12新手提供了从软件安装、初始设置到数据导入和编码分析的完整避坑指南。通过一个“校园欺凌现象的学生访谈研究”实战案例,详细拆解了处理中文文本、创建项目结构、执行手动编码及高级查询等关键步骤,帮助研究者避开常见错误,快速上手并高效完成质性数据分析。

resnet7explorer的博客 315

Wezterm的安装和简单配置

希望 wezterm 的主题配色,保持和 powershell 默认配色一致,也就是 Compell 主题。目的是在频繁使用 wezterm 时,原本的根据颜色判断文件信息(尤其是WSL里的Linux下,文件和目录颜色)依然可以使用。wezterm 默认用 cmd.exe, 我是 win11,希望默认用 powershell。

baiyu33的博客 4264

继承和实现引发的思考-基础知识

mybatis-plus的 IService 使用时,基本都是我们自己写的Service(假设是BService) 继承 mybatis-plus的 IService 然后我们自己的实现类(假设是BServiceImpl) 继承 IServiceImpl,实现BService。然后在后续的使用中,@Autoware注入即可正常使用从IServiceImpl 扩展来的方法。大概不细细思考会有点困惑,既然子类BServiceImpl已经继承了 IServiceImpl 子类不就获取到了IServiceImpl里

腾蛟起凤吕学士 1128

HITECH海泰克触摸屏如何使用串口进行程序的下载和上传(拨码设置)以及离散量报警相关设定?

HITECH海泰克触摸屏如何使用串口进行程序的下载和上传(拨码设置)以及离散量报警相关设定? 首先,我们进行触摸屏一侧的设置,如下图所示: 触摸屏背后有拨码开关,当我们需要上传或下载程序时,需要将7#开关拨到上面; 左侧是DC24V电源接口; 下方是COM1、COM2和COM3通信端口,选择我们需要的端口后,插上通信电缆,拔掉24V电源,然后重新上电; 然后,屏幕会进入如下图所示界面,此时显示当前选择的端口为COM2,我们点击F2“config”,进入设置界面, 可以看到COM2端口是“Enabled”

Robot_PLC_HMI_Automation 3万+

Android多个servivce通信,Android中通过Messenger与Service实现进程间双向通信

Android中的Service和其调用者既可以在同一个App中,也可以在不同的App。如果Service在App1中,而调用Service的客户端在App2中,那么我们就可以用Service实现进程间的相互通信。本文将介绍如何通过bindService和Messenger实现进程间通信(IPC),如果对bindService绑定服务和Binder不熟悉,可参见《Android中bindServi...

weixin_33542015的博客 635

万字长文带你由浅入深夯实ARM汇编基础——汇编指令及寻址方式最全梳理(附示例)!

见到汇编就害怕?读完这篇,扫除汇编拦路虎!!(示例丰富,可做手册,随手查阅!)

车载系统攻城狮 1万+

科研必备:15款顶尖AI科研工具全面分析汇总(持续更新ing)

科研必备:15款AI科研工具全面分析汇总(持续更新ing)

Code_流苏:在代码中寻诗意,在实践中觅真知 9634

android 如何extends 多个,Android多线程:继承Thread类 使用解析(含实例教程)

前言在Android开发中,多线程的使用十分常见今天,我将全面解析多线程其中一种常见用法:继承Thread类。目录示意图1. 简介示意图2. 使用讲解2.1 使用步骤示意图2.2 具体使用// 步骤1:创建线程类 (继承自Thread类)class MyThread extends Thread{// 步骤2:复写run(),内容 = 定义线程行为@Overridepublic void run(...

weixin_35908791的博客 1391

9.16华为OD机试真题 新系统 - 矩阵螺旋遍历 (Java/Py/C/C++/Js/Go)

9.16华为OD机试真题 新系统 - 矩阵螺旋遍历 (Java/Py/C/C++/Js/Go)

算法大师! 637

【Android】安卓四大组件之服务(Service)详解:从基础到进阶

Service作为安卓应用后台任务处理的核心组件,在保障应用功能完整性和提升用户体验方面起着不可或缺的作用。通过掌握Service的生命周期、分类及使用场景,开发者能够合理设计应用架构,实现高效、稳定的后台任务处理。随着安卓系统的不断升级,Service的使用也需与时俱进,结合新特性和替代方案,让应用在后台运行中发挥更大价值。希望本文能帮助大家深入理解Service,在安卓开发中灵活运用这一强大工具

m0_59734531的博客 1522

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android四大组件:activity、service、content provider、broadcast reciver

1、activity组件:可看作是平时玩手机时的一个界面 2、service组件: Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。 3、content provider组件:可实现进程间通信 (1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentRe

qq_39691723的博客 827

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android四大组件(Activity,Service,BroadcastReceiver,Content Provider)

安卓的四大组建,五大布局Android四大组件:Activity、Service、Broadcast Receiver、Content Provider。1、 Activity 可以去本人博客activity了解学习是Android程序与用户交互的窗口,从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元素。从内部逻辑来看,Activity需要为了保持各个

Mr_haimeng的博客 1358

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android四大组件:Activity、Service、Broadcast Receiver、Content Provider

Android四大组件:Activity、Service、Broadcast Receiver、Content Provider。

YLBF_DEV的专栏 1448

安卓基础巩固(二):四大组件:Activity、Service、Broadcast、Content Provider

简单介绍Android工程中的资源目录(resources),res。资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。把资源放进对应的目录后,可使用在项目R类中生成的资源ID来访问这些资源。形如R.drawable.icon,R.layout.main_activity。R类是自动生成的。代表resources。将各类资源放入项目 res/ 目录的特定子目录中。子目录的名字特别重要。我们把不同的资源放到不同的子目录中(res子目录)。参考下面的表格。

芸兮的博客 1071

Android Studio:四大组件之Service

一.服务基本上分为两种形式: 启动 当应用组件(如 Activity)通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响。 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。例如,它可能通过网络下载或上传文件。 操作完成后,服务会自行停止运行。 绑定 当应用组件通过调用 bindSe...

Leo_Huang720的博客 1万+

Android四大组件之二:Service

1.Android四大组件之一Service   [1]概念:服务可以长期在后台运行,但是没有用户界面。通常用来控制音乐播放,联网下载等等。   [2]服务分两种:                1.非绑定服务                  startService() --> 启动服务  --> onCreate --> onStartCommand --> running

安静的美男子 377

Android四大组件:Service

前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍对Service进行全面介绍(基础认识、生命周期、使用和应用场景) 目录 目录 1. 基础知识 定义:服务,属于Android中的计算型组件 作用:提供需要在后台长期运行的服务(如复杂计算、下载等等) 特点:长生命周期的、没有用户界面、在后台运行 2....

diaoyu6664的博客 135

Android:四大组件之一service小结

Service是一段不定的时间运行在后台、不和用户交互的应用组件,每个Service必须在manifest中通过来声明,通过contect.startservice和contect.bindservice来启动。     生命周期:Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动S

且听风吟的专栏 3048

Android四大组件之Service:本地service

简介 Service是一个应用组件, 它用来在后台完成一个时间跨度比较大的工作 且没有关联任何界面 一个Service可以完成下面这些工作: 访问网络 播放音乐 文件IO操作 大数据量的数据库操作 服务的特点: Service在后台运行,不用与用户进行交互 即使应用退出, 服务也不会停止. 在默认情况下,Service运行在应用程序进程的主线程(UI线程)中, 如果需要在Service中处理一些网络连接等耗时的操作, 那么应该将这些任务放在分线程中处理,避免

入梦镜 268

Android四大组件之一:Service

Android四大组件之一Service,简单的了解Service的两种启动方式、IntentSeric、进程的优先级。

人生旅途上的一个脚印 569

Awesome-Android-Interview四大组件深度解析:Activity、Service、Broadcast、ContentProvider

Android四大组件是构建应用的核心基石,理解它们的工作原理和交互方式对于开发高质量应用至关重要。本文基于Awesome-Android-Interview项目,为你深度解析Activity、Service、BroadcastReceiver和ContentProvider这四大组件的核心概念、生命周期和最佳实践,帮助你在面试和实际开发中游刃有余 🚀 ## 一、Activity:用户交互的窗

gitblog_01098的博客 506

Android四大组件之二:Service总结

一.理解Service二.如何创建一个Service?简单点来说就是: 三.Service的分类四.Serviece的启动方式五.Service的生命周期根据生命周期来分析它的启动与绑定 tart的方式:: 第1次启动:构造器—onCreate()—onStartCommond()第n次启动(n >1):执行一次startService(),就调用一次:onStartCommond()第1次停

cjm2484836553的博客 927
上一篇: 安卓四大组件:BroadCastReceiver
下一篇: 安卓四大组件:ContentProvider
魔幻音
博客等级 码龄6年 16粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值