Android学习(二)——四大组件之Service

Android 之 四大组件、六大布局、五大存储 Android 之四大组件、六大布局、五大存储:https://blog.youkuaiyun.com/shenggaofei/article/details/52450668 Android 四大组件、五大存储、六大布局:https://blog.youkuaiyun.com/xiankog/article/details/81702119 Android四大基本组件介绍... 阅读详情

Service基础使用

Service是一个应用组件,它表示一个应用期望去执行一个不与用户交互的较长的操作或者通过一些功能为其他应用去使用。

作为android四大组件之一,Activity负责与用户交互,而Service则负责不与用户交互的那些工作,比如后台下载,后台播放音乐等需在后台长期运行的服务。

无用户界面、在后台运行、生命周期长

生命周期

service有两种生命周期,由于启动方式不同生命周期也不同。

这里写图片描述

startService()

    @Override
    public void onCreate() {
        super.onCreate();
        // 创建服务
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
        // 开始服务
    }

     @Override
    public void onDestroy() {
        super.onDestroy();
        // 销毁服务
    }

bindService()

    @Override
    public void onCreate() {
        super.onCreate();
        // 创建服务
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
        //绑定服务
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
        // 解绑服务
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        // 销毁服务
    }

绑定式服务(Bound启动方式)

绑定服务

通过bindService()启动的Service

    // 绑定服务
    ServiceConnection mConnection = ServiceConnection() { ... };
    Intent intent = new Intent(this, MyService.class);
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

解除绑定

    // 解除绑定
    unbindService(mConnection);

关于绑定Service的流程

  • 实现一个ServiceConnection ,必须重写两个方法
    • onServiceConnection():系统调用这个来传送在service的onBind()中返回的IBinder.
    • OnServiceDisconnected():Android系统在同service的连接意外丢失时调用这个.比如当service崩溃了或被强杀了
  • 定义一个Intent,我们android四大组件都使用Intent进行交互
  • 传一个int值的flag:
    • 0,如果不想设置任何值,就设置成0
    • Context.BIND_AUTO_CREATE,绑定服务时候,如果服务尚未创建,服务会自动创建,在API LEVEL 14以前的版本不支持这个标志,使用Context.BIND_WAIVE_PRIORITY可以达到同样效果
    • Context.BIND_DEBUG_UNBIND,通常用于Debug,在unbindService时候,会将服务信息保存并打印出来,这个标记很容易造成内存泄漏。
    • Context.BIND_NOT_FOREGROUND,不会将被绑定的服务提升到前台优先级,但是这个服务也至少会和客户端在内存中优先级是相同的。
    • Context.BIND_ABOVE_CLIENT,设置服务的进程优先级高于客户端的优先级,只有当需要服务晚于客户端被销毁这种情况才这样设置。
    • Context.BIND_ALLOW_OOM_MANAGEMENT,保持服务受默认的服务管理器管理,当内存不足时候,会销毁服务
    • Context.BIND_WAIVE_PRIORITY,不会影响服务的进程优先级,像通用的应用进程一样将服务放在一个LRU表中
    • Context.BIND_IMPORTANT,标识服务对客户端是非常重要的,会将服务提升至前台进程优先级,通常情况下,即时客户端是前台优先级,服务最多也只能被提升至可见进程优先级,
    • BIND_ADJUST_WITH_ACTIVITY,如果客户端是Activity,服务优先级的提高取决于Activity的进程优先级,使用这个标识后,会无视其他标识。

非绑定式服务(Started启动方式)

启动服务

// 启动服务
Intent intent = new Intent(this, MyService.class);
startService(intent);

停止服务

stopService(intent)

关于非绑定服务

  • 使用这个方法启动的服务,再次调用startService()传入Intent即可与服务通信,因为这种方式启动的服务在完整的生命周期内onCreate()只会执行一次,而onStartCommand()会执行多次,我们每次调用startService()。
  • 服务不会停止,直到服务自己调了stopSelf()方法或者其他组件调用了stopService() 方法或者服务自身报错崩溃等情况才能停止服务。

通信

与服务间的通信大体有一下三种

  1. 万能通信机制:广播与本地数据共享(ContentProvider/SharePreference等等)
  2. Started启动模式下的startService()方法:传入一个Intent即可与服务通信,每次调用startService时,在onStartCommond方法中去处理Intent即可。
  3. Bound启动方式下
    1. Service中实现IBinder进行通讯
    2. 使用Messenger(简化版AIDL)
    3. AIDL
      如果你的Service只是应用在本进程中,那么只要使用第一种方法就可以满足通讯,如果是其他进程的Service那么你就要采取进程间通讯了(第2、3种方式)

前台运行服务

服务可以通过调用startForeground来转变为前台优先级

    public final void startForeground(int id, Notification notification) 

这个方法最后还是要调NotificationManager.notify(int id, Notification notification) 所以前面的id 就相当于notify方法的id,notification就是我们的通知体

如果你想从前台移除这个Service了,那就调用stopForeground

    public final void stopForeground(boolean removeNotification) 

参数是一个移除通知的标识,如果服务在前台运行时候被停止,状态栏的通知也会被移除。

startService 与 bindService 差异

大体先总结一下几点:


  1. 启动方式:这是最明显的,一个调startService(),一个调bindService();
  2. startService启动之后,正常来讲是无法返回结果的,也就是说前端页面上是没有办法干涉Service内部的动作的(你要说发广播或者监听之类的我也没法反驳,但是页面级别UI操作至少没办法)
  3. 而bindService由于里面重写了IBinder方法,我们可以和service交互,发送请求,得到结果甚至执行IPC通信,而且我们重载onServiceConnected还可以监听Service的状态。

然而这两种方式也并不是完全分开的,在我看来只是不同地方不同用法而已
也就是说我们start了一个Service之后,如果你想与之绑定,对内部进行操作,还是可以bindService的,只不过如果你bind了之后stopService()或 stopSelf()实际上并不能停止这个service,除非所有的客户都解除绑定。

Service 与 IntentService

我这里有一篇Service&IntentService的博客讲了关于两个的不同

总结

Service 的用途还是很广的,还是得多看博客,多看源码,多写多用才能融会贯通

Android 四大组件之Service的详解 ** 一、Service的简介 ** Service是Android中实现程序后台运行的解决方案,适用于去执行那些不需要和用户交互而且还要求长期运行的任务。Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互。 作用:提供 需在后台长期运行的服务 特点:无用户界面、在后台运行、生命周期长 1、Service的生命周期 阅读详情

相关推荐

S/4中的16种特殊库存类型

S/4中的16种特殊库存类型

yanzibing99的博客 1万+

android绑定服务和非绑定服务器,Android绑定服务

目录0x10 介绍0x20 知识准备0x30 创建绑定服务0x31 扩展 Binder 类0x32 使用 Messenger0x40 绑定到服务0x41 附加说明0x50 管理绑定服务的生命周期0x10 介绍(被)绑定(的)服务是客户端-服务器接口中的服务器。绑定服务可以让组件(例如 Activity)绑定到服务,发送请求、接收响应,执行进程间通信(IPC)。绑定服务通常只在为其它应用组件服务时处...

weixin_28982301的博客 531

【Anaconda】conda国内镜像源快速配置指南(清华/阿里云)

本文详细介绍了如何为Anaconda配置国内镜像源(清华/阿里云),以显著提升conda包下载速度并减少安装失败率。通过分步指南和实用技巧,帮助开发者快速完成配置,优化Python开发环境。

weixin_33725722的博客 1488

三 service 面试详解

一 基础知识01 定义service 中文译为服务。它和 activity boardcastReceive contentProdived,并称为 Android 四大组件,service 属于计算型的组件。02 作用提供长期运行在后台的服务,例如播放音乐,复杂计算,下载,实时传输地理位置信息等。03 特点长生命周期,没有用户界面,运行在后台,进程的优先级高于 activity 。运行在主线程,不

做最好的自己 609

【Unity3D】RTS Engine 笔记一

RTS Engine 中配置一个新场景, 初步认识GameManager、设置地形以及配置地形网格搜索

ViYeye的博客 1652

VPS环境搭建及配置

VPS(Virtual Private Server)是一种虚拟化技术,可以将一台物理服务器分成多个虚拟服务器,每个虚拟服务器都有独立的操作系统和资源,相互之间互不影响。VPS可以提供类似于独立服务器的功能,但价格更便宜,适合中小企业和个人用户使用。VPS可以用于网站托管、应用程序部署、游戏服务器、数据备份等各种场景。

YJ_12340的博客 1万+

Android记录服务绑定时用到的Context.BIND_AUTO_CREATE的作用

看了几篇博客,下面总结一下个人对Context.BIND_AUTO_CREATE的作用: 通过bindService()绑定服务,如果客户端绑定时,第三个参数为Context.BIND_AUTO_CREATE,表示只要绑定存在,就自动建立Serice。(参考android BindService) 一个服务可以给多个客户端绑定,在真正销毁服务前,会检查和该服务绑定的连接信息(调用该次unbin...

xiaoyu_wu的博客 1万+

告别CPU空转!用STC8的SPI+DMA高效驱动上百颗WS2812B灯珠

本文详细解析了如何利用STC8单片机的SPI+DMA外设高效驱动WS2812B全彩灯珠,解决传统软件延时驱动方式在长灯带应用中的性能瓶颈。通过硬件方案设计、数据格式转换和DMA传输配置,实现高达400Hz的刷新率和低于5%的CPU占用率,适用于大规模灯光项目。

weixin_30847939的博客 397

Android切换台台important,Android之Service总结

1. 简介与前一篇Android之Activity总结是同一系列的文章,是自己在学习和研发过程中,对Service的一些知识点的总结,汇总得到这篇文章。这篇文章会从Service的一些小知识点,延伸到Android中几种常用进程间通信方法。2. 进程Service是一种不提供用户交互页面但是可以在后台长时间运行的组件,可以通过在AndroidManifest.xml设置Service的androi...

weixin_31463457的博客 317

MATLAB计算各种复合干热指数,如SDHI、DHMI等

MATLAB编程实现各种复合干热指数

WW、forever的博客 5082

11、Windows Autopilot 部署与设备注册全攻略

本文详细介绍了Windows Autopilot的完整部署流程,涵盖注册配置文件设置、注册状态页面(ESP)配置、设备注册方法(包括CSV导入、JSON注入、在线注册等)、自动化脚本实现及故障排除技巧。通过手动与PowerShell自动化两种方式指导用户完成配置,并提供流程图、最佳实践和常见问题解答,帮助IT管理员高效实现设备零接触部署与管理。

ii567的博客 343

Android执行多服务,Android四大组件之Service全解析

1. 简介这篇文章会从Service的一些小知识点,延伸到Android中几种常用进程间通信方法。2. 进程Service是一种不提供用户交互页面但是可以在后台长时间运行的组件,可以通过在AndroidManifest.xml设置Service的android:process=":remote"属性,让Service运行另一个进程中,也就是说,虽然你是在当前应用启动的这个Service,但是这个S...

weixin_33206646的博客 644

开源模型应用落地-qwen模型小试-入门篇(二)

在windows环境下,使用transformer设置模型参数/System Prompt/历史对话

以微薄之力,予他人些许温暖. 3240

Android 学习之四大组件(二)——service

Android 学习之四大组件(二)——service 1、什么是Service Service没有用户界面,运行在后台。负责处理一些用户看不到的、并且有持续时间的事情。有时候我们退出应用,Service并没有结束,它仍在后台运行,一般在播放音乐,下载数据等情况下会用到Service。 2、service的种类  service按照不同的方式有不同的分类。 按运行地点:本地服务(Loca

紫雾凌寒 798

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android四大组件学习笔记(二)_Service

文章目录1. 什么Service2. Service的生命周期3. Service的启动方式3.1 startService()——启动服务3.2 bindService()——绑定服务3.3 启动服务与绑定服务的转换4. Service与Activity间通信——onBind()5. 前台ServiceIntentService——子线程Service6. 部分控件ImageViewCheckBoxRadioButtonProgressBarDialog 1. 什么Service   &nbsp

秀才恶霸的博客 580

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 四大组件学习之Service二

上节学习如何创建了一个Service,并且用Activity启动一个Service。这节我们在上节的基础上更加完善 这节学习用StartServer启动服务,并且在服务中每隔一秒打印出当前时间 举例说明: MyActivity代码: public class MyActivity extends Activity { private Button btn_start; private

半月旋空 1005

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 四大组件之service学习总结(二)

1.Started Service 代码详解 Started Service实现方法及步骤: 1、创建一个Started Service类必须继承Service这个类。 2、在Started Service类中实现如下接口:       onStartCommand(Intent intent, int flags, int startId)必须实现!在其中启动服务提供的功能。例如,若该服

icedcap的专栏 858

Android学习--四大组件之 Service(二)

四.Service的生命周期 Service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started Service   启动的Service通过其他组件调用 startService()被创建。   这种Service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。   当Service被停止时,

万里不理 453

android学习笔记(二)四大组件Service详解

service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。  Service是在一段不定的时间运行在后台,不和用户交互应用组件。每个Service必须在manifest中 通过来声明。可以通过contect.startservice和co

eric_hwp的专栏 808

Android四大组件基础学习之Service

通过一个基础案例来学习Android四大组件,一共分为4章,陆续更新中,如果有做的不好的地方、文章上的错误,或者是建议,欢迎大家在评论区或者私信我,感谢大家的包容和理解!

Y3036359510的博客 1337

【Android学习】(二)四大组件

最近需要通过一些安卓Demo来学习熟悉部门相关业务。本文梳理里APP开发的基本信息(应用层面初步了解),解四大组件,(重点活动+服务)

m0_37659309的博客 2228

8.安卓逆向-安卓开发基础-安卓四大组件1

安卓逆向 安卓协议分析 app协议分析 保姆级攻略 app逆向 Android apk逆向

计算机王的博客 1658

Android四大组件

仅供自己学习使用-转载请注明文中内容出自哪里(我已不知道哪里复制的) 目录 一、活动(Activity) 1.概念 2.生命周期 3.Intent 4.Activity启动模式和任务栈 二、服务(Service) 1.概念 2.生命周期 3.启动方式 三、广播接收者(Broadcast Receive) 1.概念 2.注册方式 四、内容提供者(Content Provider) 1.概念 2.用途 Android 系统的四大组件分别是:活动(activit...

小小怪大人物de博客 4896

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

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

Mr_haimeng的博客 1358
上一篇: Android学习(一)——四大组件之Activity
下一篇: Android学习(2.5)—— Service 与 IntentService
豪利丶王
博客等级 码龄11年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值