广播与服务(二)

服务两种启动方式

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

            onCreate->onBind->onUnbind->onDestroy


找领导办证

  • 把服务看成一个领导,服务中有一个办证方法,如何才能访问?
  • 绑定服务时,会触发服务的onBind方法,此方法会返回一个Ibinder的对象给MainActivity,通过这个对象访问服务中的方法
  • 绑定服务
    Intent intent = new Intent(this, BanZhengService.class);
    bindService(intent, conn, BIND_AUTO_CREATE);
  • 绑定服务时要求传入一个ServiceConnection实现类的对象
  • 定义这个实现类
    class MyServiceconn implements ServiceConnection{
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            zjr = (PublicBusiness) service;
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
    }
  • 创建实现类对象
     conn = new MyServiceconn();
  • 在服务中定义一个类实现Ibinder接口,以在onBind方法中返回
    class ZhongJianRen extends Binder implements PublicBusiness{
        public void QianXian(){
            //访问服务中的banZheng方法
            BanZheng();
        }
        public void daMaJiang(){
    
        }
    }
  • 把QianXian方法抽取到接口PublicBusiness中定义

两种启动方法混合使用

  • 用服务实现音乐播放时,因为音乐播放必须运行在服务进程中,可是音乐服务中的方法,需要被前台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,就可以在其他应用中拿到中间人类所实现的接口

支付宝远程服务

  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绑定的服务
时间: 2024-11-05 14:55:28

广播与服务(二)的相关文章

Android 广播与服务

一,广播2种不同的注册方式的选择: Andorid 广播有手动注册与清单文件注册2种方式: 清单文件注册,不需要在代码中进行任何操作,甚至不需要实例化广播接收者.因为Android将会创建实例并管理它的生命周期.注意的是,接收onReceive()调用的实例只有在onReceive()的持续时间内有效.实际上,每个对onReceive()方法的调用都有可能是在不同的广播接收实例上进行.意味着必须避免异步调用其它类. 手动注册,必须在不用时注销广播,如果在一个活动中注销失败会导致一个异常,其中An

[android] 代码注册广播接收者&利用广播调用服务的方法

利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光 主界面里面 在界面创建的时候开启一下服务普通的startService()方法 发送一条广播出去 获取Intent对象,通过new出来 调用Intent对象的setAction()方法,参数:一般就是包名 调用sendBroadcast(intebt)方法,发送广播,参数:Intent对象 服务里面 新建一个MyService类继承系统的Service类 添加一个自定义的服务的方法callServiceMeth

Android 广播、服务、数据库、通知、包原理及描述

简介 在Android中运用了很多机制,例如:广播.服务.数据库.通知.包--等等.        什么是广播?Broadcast是一种广泛运用的在应用程序之间传输信息的机制.类似广播电台,根据特定频率来接收发送. 什么是服务?Service是android 系统中的四大组件之一,它跟Activity级别一样,但不能自己运行只能后台运行,并且可以和其他组件进行交互.使用场合例如:后台音乐播放器.         使用了什么数据库?在android中使用了开源项目sqlite操作数据. SQLit

Robotium通过广播与服务+shell命令实现跨进程自动化测试之广播与服务

还记得当初刚学robotium的时候,有人提起过这个方法,当时觉得很牛逼,暂时不想接触(其实就是对比较深入,难以快速理解的知识的畏惧).现在到了不得不去了解的时候,也只能硬着头皮上了... 先来讲一下我现在对这个方法的理解:整个Android程序,我们可以看成是一个个的实验室(进程)组成的,我们使用robotium就转属于其中一个实验室,实验室的规定非常的严格,不允许人员进入其他的实验室.但是人总是要有些消息或者有些活动需要别的实验室配合(跨进程)..这个时候我们只有一种办法,就是通过中转人员(

Sharepoint2013搜索学习笔记之创建搜索服务(二)

第一步,进入管理中心,点击管理服务器上的服务 第二步,在服务器上选择需要承载搜索服务的服务器,并启动服务列表上的sharepoint server search 第三步,从管理中心进入管理服务应用程序 第四步,新建search service application 第五步,在弹出的新建窗口分别填好相应信息点击确定,主要注意的是 应用程序池可以选择已经有的,也可以自己填一个新的名称,选择填写新的之后,程序会在稍后新建一个应用程序池,一般推荐新建应用程序池. 默认情况,爬网组件会用配置好的搜索服务

Robotium通过广播与服务+shell命令实现跨进程自动化测试之shell命令篇

本来说是周末的时候想把shell篇整理出来的,结果,周六加班,加完班和朋友出去玩,礼拜天又偷了个懒,结果周末什么都没做,跟研发老大说准备的接口测试资料也没有准备好..人生啊!到了礼拜一因为上线的缘故,加班到今天凌晨2点才到家里..人生啊!所以今天赶紧上来把下篇写了,其实东西并不是很多..匆忙整理,如有错误,欢迎指正. 上一篇博文写完了广播与服务,现在我们已经有了一个服务,服务里面注册了一个接收器,用来接收我们的广播信号,只要接收器匹配到了相应的广播信号,我们就开始onReceive中的代码.所以

5、SAMBA服务二:配置实例

①:SAMBA服务一:参数详解 ②:SAMBA服务二:配置实例 5.2.3.Samba共享目录配置实例 原文地址:https://www.cnblogs.com/-xuan/p/10542392.html

.NET Core微服务二:Ocelot API网关

.NET Core微服务一:Consul服务中心 .NET Core微服务二:Ocelot API网关 .NET Core微服务三:polly熔断与降级 本文的项目代码,在文章结尾处可以下载. 本文使用的环境:Windows10 64位 + VS 2019 + .NET Core 2.1 + Ocelot 8.0.8 Ocelot 相关地址: https://github.com/ThreeMammals/Ocelot https://ocelot.readthedocs.io/en/lates

Android应用开发基础之广播与服务(二)

服务两种启动方式 startService:服务被启动之后,跟启动它的组件没有一毛钱关系 bindService:跟启动它的组件同生共死 绑定服务和解绑服务的生命周期方法:onCreate->onBind->onUnbind->onDestroy 找领导办证 把服务看成一个领导,服务中有一个banZheng方法,如何才能访问? 绑定服务时,会触发服务的onBind方法,此方法会返回一个Ibinder的对象给MainActivity,通过这个对象访问服务中的方法 绑定服务 Intent i