Android-BoundService

一 binder

内核->字符设备binder(负责进程间通信的驱动)->servicemanager->binder类->binger接口





二 实现机制

C/S结构

调用服务的方法的映射

进程指针->指向远程server方法的指针->memory 

装程序stub:指向远端指针的指针(句柄)。这个句柄发送请求给远端的句柄(通信的机制可能是binder也可能是其它的IPC)

要求远端的句柄调用某些方法,然后远端返回给本地,

本地通过接收这个句柄,得到远程的某些实例方法,能够操作这些方法。但并非直接操作远程的内存空间





三 BoundService编写步骤

1 继承Service或者IntentService实现某些服务类

2 在manifest文件里注冊服务类

3 绑定服务bindService

4 取消绑定unbindService





四 常见问题

1 onBind和onServiceConnected两个方法谁先运行:

onBind先运行





2 onUnbind和onServiceConnected两个方法谁先运行:

onServiceConnected先运行





3 理解binder的作用:

依赖于ServiceManager,它提供IBind接口。client向它发送请求,

IBind即是Android基于linux的IPC进程间通信在进行封装进程间通信的方式

也是RPC远程通信







Activity也用的binder通信

C和S在一个进程中:local服务

C和S不同的进程中:remote服务

可是实现机制都一样

binder也用到serviceManager

Android-BoundService的更多相关文章

  1. Android进程间的通信之AIDL

    Android服务被设计用来执行很多操作,比如说,可以执行运行时间长的耗时操作,比较耗时的网络操作,甚至是在一个单独进程中的永不会结束的操作.实现这些操作之一是通过Android接口定义语言(AIDL ...

  2. 【Android 界面效果34】Android里Service的bindService()和startService()混合使用深入分析

    .先讲讲怎么使用bindService()绑定服务 应用组件(客户端)可以调用bindService()绑定到一个service.Android系统之后调用service的onBind()方法,它返回 ...

  3. Android ServiceConnection

    绑定到一个Service 应用组件(客户端)可以调用bindService()绑定到一个service.Android系统之后调用service的onBind()方法,它返回一个用来与service交 ...

  4. Android开发之IPC进程间通信-AIDL介绍及实例解析

    一.IPC进程间通信 IPC是进程间通信方法的统称,Linux IPC包括以下方法,Android的进程间通信主要采用是哪些方法呢? 1. 管道(Pipe)及有名管道(named pipe):管道可用 ...

  5. Android学习总结——Service组件

    从Service的启动方式上,可以将Service分为Started Service和Bound Service.在使用Service时,要想系统能够找到此自定义Service,无论哪种类型,都需要在 ...

  6. Android探索之旅 | AIDL原理和实例讲解

    轉載自http://www.jianshu.com/p/ef86f682a8f9 -- 作者 谢恩铭 转载请注明出处 前言 为使应用程序之间能够彼此通信,Android提供了IPC (Inter Pr ...

  7. 【Android学习】Service&Boradcast初步

    Service初步 掌握Service概念 掌握Service分类 Service开发能力具备 了解Service和intentService类的区别 重点难点 StartService和BoundS ...

  8. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  9. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  10. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

随机推荐

  1. 如何将git 关联到Pycharm

    一,预置条件 1,安装pycharm 2,安装git 仓库 二,关联步骤 1,打开Pycharm  File | Settings | Version Control | Git 2,配置需要关联的 ...

  2. jdk8 StreamApi

    List<User> userList=new ArrayList<>(); userList.add(User.builder().age().name()).build() ...

  3. spring boot +mybatis+druid 多数据源配置

    因为我的工程需要在两个数据库中操作数据,所以要配置两个数据库,我这里没有数据源没有什么主从之分,只是配合多数据源必须要指定一个主数据源,所以我就把 操作相对要对的那个数据库设置为主数据(dataBas ...

  4. #include""和#include<>的区别

    一般来说,就是搜索路径不同 #include ""先去搜用户当前路径(也就是调用编译器的路径),然后再去搜用户用-I选项指定的路径,最后再去搜索编译器默认指定的路径(也就是所谓的系 ...

  5. C#数组、ArrayList和List<T>

    1.数组: 数组在内存中是连续的,索引速度快.赋值与修改简单. 数组的两个数据中间插入数据麻烦,且在声明数组的时候必须指定数组长度.数组长度过长,会浪费内存,过短会造成数据溢出. 2.ArrayLis ...

  6. Unix系统编程()文件空洞

    如果程序的文件偏移量已然跨越了文件结尾,然后再执行IO操作,将会发生什么情况? read调用将会返回0,表示文件结尾.令人惊讶的是,write函数可以在文件结尾后的任意位置写入数据. 从文件结尾后到新 ...

  7. Nginx指令概述

    指令概述 配置指令是一个字符串,可以用单引号或者双引号括起来,也可以不括.但是如果配置指令包含空格,一定要引起来. 指令参数 指令的参数使用一个或者多个空格或者TAB字符与指令分开.指令的参数有一个或 ...

  8. SWT将系统图标保存为本地文件

    public class SWTImage {     public static void main(String[] args) {         final Display display = ...

  9. 【转】redis C接口hiredis 简单函数使用介绍

    from : http://blog.csdn.net/kingqizhou/article/details/8104693 hiredis是redis数据库的C接口,目前只能在linux下使用,几个 ...

  10. 利用JMeter的beanshell进行接口的加密处理

    最近项目中在做http协议的接口测试,其中接口请求报文数据有个字段值需要用到加密后的签名,即出于网络传输过程中,对数据安全的考虑,要对请求的数据进行特定的处理(加密),再进行请求. 刚开始由于项目赶进 ...