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的更多相关文章
- Android进程间的通信之AIDL
Android服务被设计用来执行很多操作,比如说,可以执行运行时间长的耗时操作,比较耗时的网络操作,甚至是在一个单独进程中的永不会结束的操作.实现这些操作之一是通过Android接口定义语言(AIDL ...
- 【Android 界面效果34】Android里Service的bindService()和startService()混合使用深入分析
.先讲讲怎么使用bindService()绑定服务 应用组件(客户端)可以调用bindService()绑定到一个service.Android系统之后调用service的onBind()方法,它返回 ...
- Android ServiceConnection
绑定到一个Service 应用组件(客户端)可以调用bindService()绑定到一个service.Android系统之后调用service的onBind()方法,它返回一个用来与service交 ...
- Android开发之IPC进程间通信-AIDL介绍及实例解析
一.IPC进程间通信 IPC是进程间通信方法的统称,Linux IPC包括以下方法,Android的进程间通信主要采用是哪些方法呢? 1. 管道(Pipe)及有名管道(named pipe):管道可用 ...
- Android学习总结——Service组件
从Service的启动方式上,可以将Service分为Started Service和Bound Service.在使用Service时,要想系统能够找到此自定义Service,无论哪种类型,都需要在 ...
- Android探索之旅 | AIDL原理和实例讲解
轉載自http://www.jianshu.com/p/ef86f682a8f9 -- 作者 谢恩铭 转载请注明出处 前言 为使应用程序之间能够彼此通信,Android提供了IPC (Inter Pr ...
- 【Android学习】Service&Boradcast初步
Service初步 掌握Service概念 掌握Service分类 Service开发能力具备 了解Service和intentService类的区别 重点难点 StartService和BoundS ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 配置android sdk 环境
1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/
- Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记
以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...
随机推荐
- 李洪强和你一起学习前端之(4)HTML5介绍
1.1认识HTML5 html的版本: html4 Xhtml1.0 目前: html5是最高的版本 再怎么变化,无非是多了一些标签而已,但是不单单是提供了一些标签 比如: 开发网页游戏 我们可以开发 ...
- DOCTYPE 与浏览器模式分析
DOCTYPE 的诞生 DOCTYPE,或者称为 Document Type Declaration(文档类型声明,缩写 DTD).通常情况下,DOCTYPE 位于一个 HTML 文档的最前面的位置, ...
- CCNA2.0笔记_子网划分
http://files.cnblogs.com/files/airoot/%E5%AD%90%E7%BD%91%E5%88%92%E5%88%86.zip 网络 默认子网掩码 A类 255.0.0. ...
- Centos + HHVM 生产环境安装!
一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...
- Swift-8-枚举
// Playground - noun: a place where people can play import UIKit // 枚举语法 enum SomeEnumeration { // e ...
- Tomcat nginx log日志按天分割切割
利用 Linux 自带的 logrotate 工具来实现按天切割日志.下方已 centos 7 系统为例来实践讲解. 原理 Logrotate是基于CRON来运行的,其脚本是/etc/cron.dai ...
- 第一百五十六节,封装库--JavaScript,延迟加载
封装库--JavaScript,延迟加载 延迟加载的好处,就是在浏览器视窗外的图片,不加载,拖动鼠标到浏览器视窗内后加载,用户不看的图片就不用加载,可以减少服务器大量流量 将图片的src地址用一张统一 ...
- 假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件。
假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件. A. MyApp目录下 B. MyApp\images目录下 C. MyApp\WEB-INF目录下 D. M ...
- VS2012使用正则删除空行
1:Ctrl + H 打开快速替换窗口 2:输入:^\s\S*$\n 3:点击使用正则替换的选项
- 一站式WPF--依赖属性(DependencyProperty)二
书接上文,前篇文章介绍了依赖属性的原理和实现了一个简单的DependencyProperty(DP),这篇文章主要探讨一下如何使用DP以及有哪些需要注意的地方. 回顾 依赖属性是由Dependency ...