安卓四大组件之Service

组合导航(八):INS/GPS组合导航 INS/GPS组合导航1 误差反馈1.1 开环INS/GPS架构1.2 闭环INS/GPS架构2 组合导航的类型2.1 松耦合 的INS/GPS组合导航2.2 紧耦合 的INS/GPS组合导航2.3 深度耦合的 INS/GPS组合导航3 INS方程的动态误差模型4 松耦合的INS/GPS组合导航模型4.1 系统模型4.2 测量模型4.3 INS/GPS松耦合总框图5 紧耦合的INS/GPS组合导航模型5.1 系统模型5.2 测量模型 INS/GPS组合导航 对比INS与GPS导航方法,二者都有其各自的优. 阅读详情

 

          一. Activity

          二. Service

          三. ContentProvider

          四. BroadCast Receiver

Services

  • 就是默默运行在后台的组件,可以理解为是没有前台的activity,适合用来运行不需要前台界面的代码
  • 服务可以被手动关闭,不会重启,但是如果被自动关闭,内存充足就会重启
  • startService启动服务的生命周期
    • onCreate-onStartCommand-onDestroy
  • 重复的调用startService会导致onStartCommand被重复调用

进程优先级

  1. 前台进程:拥有前台activity(onResume方法被调用)
  2. 可见进程:拥有可见activity(onPause方法被调用)
  3. 服务进程:不到万不得已不会被回收,而且即便被回收,内存充足时也会被重启
  4. 后台进程:拥有后台activity(activity的onStop方法被调用了),很容易被回收
  5. 空进程:没有运行任何activity,很容易被回收

开启和关闭服务

    Intent intent = new Intent(this, MyService.class);  
    //显式启动服务
    startService(intent);
    关闭服务
    stopService(intent);

服务两种启动方式

  • startService:服务被启动之后,跟启动它的组件没有一毛钱关系
  • bindService:跟启动它的组件同生共死
  • 绑定服务和解绑服务的生命周期方法:onCreate->onBind->onUnbind->onDestroy

通过AIDL调用服务里的方法

AIDL:PayInterface.aidl

package com.itheima.alipay;

interface PayInterface {

	void pay();
}

服务端:

public class PayService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
    //返回给客户端
		return new PayPangZhi();
	}

	class PayPangZhi extends Stub{

		@Override
		public void pay() throws RemoteException {
            //调用服务端方法
			PayService.this.pay();
		}
		
	}
	
	public void pay(){
        //服务端的方法
	}
}

客户端:

public class MainActivity extends Activity {
	PayInterface pi;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Intent intent = new Intent();
		intent.setAction("com.itheima.pangzhi");
		bindService(intent, new ServiceConnection() {
			
			@Override
			public void onServiceDisconnected(ComponentName name) {
				// TODO Auto-generated method stub			
			}			
			@Override
			public void onServiceConnected(ComponentName name, IBinder service) {
				// 使用aidl中自动生成的方法来强转
				pi = Stub.asInterface(service);
			}
		}, BIND_AUTO_CREATE);
	}

	public void click(View v){
		//调用远程服务的支付方法
		try {
			pi.pay();
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

两种启动方法混合使用

  • 用服务实现音乐播放时,因为音乐播放必须运行在服务进程中,可是音乐服务中的方法,需要被前台Activity所调用,所以需要混合启动音乐服务
  • 先start,再bind,销毁时先unbind,在stop

使用服务注册广播接收者

  • Android四大组件都要在清单文件中注册
  • 广播接收者比较特殊,既可以在清单文件中注册,也可以直接使用代码注册
  • 有的广播接收者,必须代码注册

    • 电量改变
    • 屏幕锁屏和解锁
  • 注册广播接收者

    //创建广播接收者对象
    receiver = new ScreenOnOffReceiver();
    //通过IntentFilter对象指定广播接收者接收什么类型的广播
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_SCREEN_ON);
    
    //注册广播接收者
    registerReceiver(receiver, filter);
    
  • 解除注册广播接收者

    unregisterReceiver(receiver);
    
  • 解除注册之后,广播接收者将失去作用

本地服务:服务和启动它的组件在同一个进程

远程服务:服务和启动它的组件不在同一个进程

  • 远程服务只能隐式启动,类似隐式启动Activity,在清单文件中配置Service标签时,必须配置intent-filter子节点,并指定action子节点

AIDL

  • Android interface definition language
  • 安卓接口定义语言
  • 作用:跨进程通信
  • 应用场景:远程服务中的中间人对象,其他应用是拿不到的,那么在通过绑定服务获取中间人对象时,就无法强制转换,使用aidl,就可以在其他应用中拿到中间人类所实现的接口

AIDL使用

远程服务端:

    清单文件:
    <service android:name="com.itheima.remoteservice.RemoteService">
        <intent-filter >
            <action android:name="com.itheima.remote"/>
        </intent-filter>
    </service>


    public class RemoteService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        System.out.println("bind方法");
        return new furong();
    }
    class furong extends Stub{//Stub类时系统由PublicBusiness.aidl文件自动生成的PublicBusiness.java
    //public static abstract class Stub extends android.os.Binder implements com.itheima.alipay.PayInterface
        @Override
        public void qianXian() {
            // TODO Auto-generated method stub
            banzheng();
        }

    }   
    public void banzheng(){
        System.out.println("李局帮你来办证");
    }
   }

 aidl文件:后缀名aidl
  package com.itheima.remoteservice;

    interface PublicBusiness {

    void qianXian();
    }

启动远程服务端:

    1. 创建跟远程服务端相同名字相同包名的aidl文件。

    2.public class MainActivity extends Activity {

    private MyserviceConn conn;

    PublicBusiness pb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        conn = new MyserviceConn();
    }
    public void click(View v){
        //启动远程服务
        Intent intent = new Intent();
        intent.setAction("com.itheima.remote");
        startService(intent);
    }
    public void click2(View v){
        //停止远程服务
        Intent intent = new Intent();
        intent.setAction("com.itheima.remote");
        stopService(intent);
    }   
    public void click3(View v){
        Intent intent = new Intent();
        intent.setAction("com.itheima.remote");
        bindService(intent, conn, BIND_AUTO_CREATE);
    }
    public void click4(View v){
        unbindService(conn);
    }
    class MyserviceConn implements ServiceConnection{
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //把Ibinder中间人对象强转成publicbusiness
            pb = Stub.asInterface(service);
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub

        }       
    }   
    public void click5(View v){
        try {
            调用aidl服务端aidl向外提供的方法。
            pb.qianXian();
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 }

支付宝远程服务

  1. 定义支付宝的服务,在服务中定义pay方法
  2. 定义中间人对象,把pay方法抽取成接口
  3. 把抽取出来的接口后缀名改成aidl
  4. 中间人对象直接继承Stub对象
  5. 注册这个支付宝服务,定义它的intent-Filter

需要支付的应用

  1. 把刚才定义好的aidl文件拷贝过来,注意aidl文件所在的包名必须跟原包名一致
  2. 远程绑定支付宝的服务,通过onServiceConnected方法我们可以拿到中间人对象
  3. 把中间人对象通过Stub.asInterface方法强转成定义了pay方法的接口
  4. 调用中间人的pay方法

五种前台进程

  1. activity执行了onresume方法,获得焦点
  2. 拥有一个跟正在与用户交互的activity绑定的服务
  3. 拥有一个服务执行了startForeground()方法
  4. 拥有一个正在执行onCreate()、onStart()或者onDestroy()方法中的任意一个的服务
  5. 拥有一个正在执行onReceive方法的广播接收者

两种可见进程

  1. activity执行了onPause方法,失去焦点,但是可见
  2. 拥有一个跟可见或前台activity绑定的服务

相关好文:https://blog.youkuaiyun.com/fengyuzhengfan/article/details/38012537

相关好文:https://blog.youkuaiyun.com/zjws23786/article/details/51800929

 

衡山派Luban-Lite系统SDIO无线网络配置实战:以D133CBV-QFN88开发板与RTL8189模组为例 本文详细介绍了在衡山派D133CBV-QFN88开发板上,为Luban-Lite系统配置SDIO无线网络的完整实战流程。通过配置SDMC接口、RTL8189 Wi-Fi驱动、lwIP协议栈及内核参数,并解决编译分区问题,最终实现Wi-Fi网络连接与测试,为嵌入式设备联网提供清晰指导。 阅读详情

相关推荐

vscode中使用PlatformIO创建工程加载慢

解决使用VSCODE+PlatformIO中,第一次新建工程一直加载的问题

Reasally的博客 4966

Service进程防杀

什么是进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的

时光如一缕沙 1332

基于Simulink/Matlab的VSG并网系统单相接地与相间短路故障仿真建模与特性分析

本文详细介绍了基于Simulink/Matlab搭建虚拟同步发电机(VSG)并网系统仿真模型的方法,并重点分析了单相接地与相间短路故障下的系统特性。通过设置三相故障模块参数,模拟了故障发生时的电压、电流变化及VSG动态响应,为理解故障机理、优化控制策略及设计继电保护提供了仿真依据与实践指导。

t8u9v0w1x的博客 514

关于Android Service真正的完全详解,你需要知道的一切

Service 1.Service基础知识概述   Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁了。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件

zejian的博客 23万+

TouchSocket TcpService:构建高性能Tcp服务的终极利器

/ 接收到的数据data");// 回复客户端await ((ITcpSessionClient)client).SendAsync("服务端已收到消息!");// 继续执行后续插件TouchSocket的TCPService以极简的API、强大的扩展性和卓越的性能,重新定义了.NET TCP服务的开发体验。无论是物联网平台还是金融级实时通信系统,TCPService均能提供可靠的基础设施支持。立即探索示例项目,开启你的高性能服务开发之旅!扩展阅读如何实现WebSocket服务?

若汝棋茗 的博客 1461

国产系统迁移实战:在银河麒麟V10上搞定Wine32位支持,让老Windows软件跑起来

本文详细介绍了在银河麒麟V10操作系统上构建Wine32位支持的全过程,帮助用户解决Windows应用迁移难题。从系统架构差异分析到Wine环境配置,再到实战应用部署与优化,提供了一套完整的解决方案,确保老Windows软件在国产系统上稳定运行。

weixin_32288959的博客 648

性能优化二十三之Service进程防杀死

前言        Service作为四大组件之一很多安卓开发者对他肯定是又爱又恨,爱在它可以帮助我们去处理常驻后台的任务操作,比如说推送服务,心跳传输等,恨在当Servcie遇到360、腾讯管家之类的杀毒软件,变得脆弱,很容易被杀死,或者当用户手机锁屏会导致服务暂时停止运行。         我们常用的进程守护的套路无外乎以下几种: 一、提高进程的优先级数值         对于Service被系

Kiven 每天都需要有所获,每天都需要进步......... 1709

【异常】Milvus向量数据库的常见错误“collection not loaded“(集合未加载)

Milvus数据库报错"collection not loaded"分析及解决方案。该错误发生在对未加载的集合执行查询操作时,核心原因是集合创建后需先加载到内存才能使用。解决方案包括:1)确认集合是否存在;2)查询前调用loadCollection接口加载集合;3)处理加载超时或失败情况,可检查加载状态;4)确保Milvus服务正常运行。建议在长期不使用集合时释放内存资源。文末附Java代码示例说明具体操作方法。

奶爸的编程之路,也就一周冷个三天 380

Android生命周期和Service生命周期

android生命周期 运行:oncreate→onstart→onresume暂停:onresume→onpause;再次运行:onresume停止:onpause→onstop→ondestroy ;重新执行:onrestart → onstart→onresume service生命周期 onCreate() → onStartCommand...

diantingpi1639的博客 297

Transformer实战(38)——视觉Transformer (Vision Transformer, ViT)

Transformer 在自然语言处理 (NLP) 领域取得了显著成就,在许多不同的任务中都表现出色。在本节中,我们将探索视觉 Transformer (Vision Transformer, ViT) 模型。正如 NLP 领域创建了多种模型一样,视觉领域也开发了多种模型,每种模型都为计算机视觉提供了新的视角。通过本节,将学习如何使用 ViT 等模型进行计算机视觉任务,了解基于 Transformer 的预训练计算机视觉模型的工作原理,以及如何针对特定任务进行微调。

盼小辉丶的博客 2818

通过采用下面方法检查内容,还是系统无法更新下载,但是错误代码变成了——下载错误 - 0x80004002-到底如何解决?必须重装系统吗?-这个到底是系统问题,还是硬件问题?

‌。

qq_15963745的博客 335

android四大组件之一——Service

Service 是应用组件,代表一个应用的长时间后台运行的操作,没有交互界面,提供给其他应用一些功能。每个service类必须在清单文件里做 声明. Services可以被启动通过和services像其他应用对象一样,运行在宿主进程的主线程。这意味着,如果你的服务要执行任何CPU密集型(如MP3播放)或阻塞(如网络)操作,它应该生成自己的线程来完成这项工作。有在Processes and Threads中可以找到更多的信息。类作为标准实现类,它有自己的线程可以按部就班的处理事务。

闲暇部落 1461

Python爬虫实战:美团外卖商家数据抓取与分析

随着互联网技术的快速发展,外卖平台已成为人们日常生活中不可或缺的一部分。本文基于Python爬虫技术,使用最新的异步爬虫框架和反爬虫绕过技术,实现了对美团外卖平台商家信息与评分数据的自动化抓取。通过对抓取数据的清洗、存储和分析,为餐饮行业市场研究和商业决策提供数据支持。本文详细介绍了爬虫的设计思路、技术实现方案、数据处理方法以及可视化分析结果,为相关领域的研究者和开发者提供参考。关键词:Python爬虫;美团外卖;数据抓取;数据分析;异步爬虫。

2201_76125261的博客 1821

【Android】安卓四大组件之Service

【Android】安卓四大组件之Service 1、Service的介绍 1.1 什么是service Service即服务,用大白话讲就是——长期运行在后台的程序,如果我们说的官方一点,那么就是用于执行长期运行的任务,并且没有与用户交互的功能。 每一个service都和activity一样,需要在manifest.xml中配置,赋予其生命。使用<service>标签即可配置 在activity类中,可以使用Context.startService()方法来开启服务,使用Context.stop

woodwhale的博客 690

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

Mr_haimeng的博客 1358

IEM模型,地表粗糙度模拟

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

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

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

m0_59734531的博客 1522

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Android】安卓四大组件之Service用法

使用Handler更新UI,基本特点后台执行Service主要用于在后台执行一些长时间运行的操作,比如音乐播放、文件下载等,而不会影响用户界面的交互。

Patrick_yuxuan的博客 1401

Android四大组件之Service

https://developer.android.google.cn/guide/components/services.html本篇博客讲解的是Android四大组件之Service,下面是内容摘要: 了解Service Android 中的进程 电话窃听器 Service 的生命周期 AIDL的使用 一、Service 的基本概念Android 官方文档对Service 的解释如下:A Ser

JackChan 1176

安卓四大组件之service

Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色,所以每一位安卓工程师对其掌握是必然的!针对Service,优快云博客之星–郭霖写了两篇比较完整的解析博客: Android Service完全解析,关于服务你所需知道的一切(上) Android Service完全解析,关于服务你所需知道的一切(下)

探路的淮--Ontheway的博客 951

android四大组件应用app,安卓四大组件———Service

1.什么是Service(服务)Service是一种后台运行的应用组件。2.Service有哪些应用场景下载任务,qq消息缓存,音乐播放器的播放3.startService方式启动Service怎么做()首先新建一个类继承Service ,实现它的onBind方法,其中可以用onCreate(),onStartCommand()和onDestroy()方法。例如package com.exampl...

weixin_30395941的博客 513

安卓开发四大组件及Service

对于activity和服务来说,它指明了请求的操作名称以及作为操作对象的数据的URI和其他一些信息。比方说,它能够承载对一个activity 的请求,让它为用户显示一张图片,或者让用户编辑一些文本。广播i接收器没有用户界面,但可以启动一个activity或service来响应收到的信息,或用NotificationManager来通知用户。静态注册无需担忧是否被关闭,只要设备是开启状态,广播接收器也是打开的。使用URI唯一标识其数据集,这里的URI以content://作为前缀,表示数据由其管理。

gfdr5的博客 297

Android 四大组件之Service

Service是android系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,区别是Service只能运行在后台不提供用户界面,并且可以和其他组件进行交互。一个Service是一个可以长期运行在后台的应用程序组件,不提供用户界面。 另一个应用程序组件可以启动一个服务,它将继续在后台运行,...

ZHS_Vistor的博客 474

Android——四大组件Service

文章目录AndroidAndroid四大组件——Service1 简介2 生命周期3 Service分类3.1 started(启动服务)3.2 bound(绑定服务)IBinder接口ServiceConnection接口 Android Android四大组件——Service service用于在后台完成用户指定的操作。 startService() 与 bindService()区别: (a)started service(启动服务)是由其他组件调用startService()方法启动的,这导致服

weixin_45044097的博客 300

安卓四大组件 —— Service

1、什么是service? service是android四大组件之一,是可以在后台长期执行并且没有用户界面的程序组件;只能运行在主线程中,不能做耗时操作,可以跨程序调用。 2、service有哪些应用场景? 当程序中的某项功能执行时间较长(如:下载,上传等)并且在执行过程中不需要用户操作,不需要Activity进行交互的情况下,可以通过service在后台完成指定任务。 3、starSe...

s15770702468的博客 728
上一篇: 安卓四大组件之Activity
下一篇: 安卓四大组件之内容提供者
kevin@1024
博客等级 码龄11年 677粉丝 95原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

kevin@1024

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

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

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

打赏作者

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

抵扣说明:

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

余额充值