binder

[Android]对ServiceManager的理解

穿精又带淫゛_ 提交于 2019-12-06 10:41:04
通讯节点: /dev/binder 何时打开:一般在ProcessState::self() 何时用:透过BBinder, BpBinder 管理者BpServiceManager , BnServiceManager 它们会通过IPCThreadState::transact()等进行操作, handle在这里指定。结构binder_transaction_data 用来读写数据。 remote()->transact()就是BpBinder->transact(), 再到IPCThreadState::transact() BpBinder不在继承关系里,只是打包数据。 Binder 通讯Thread何时起来: 某个service死掉,要如何知道: ServiceManager的handle 是0 int main(int argc, char** argv) { sp<ProcessState> proc(ProcessState::self()); sp<IServiceManager> sm = defaultServiceManager(); MediaPlayerService::instantiate(); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(

android 学习之 zygote作用

独自空忆成欢 提交于 2019-12-05 14:32:55
Zygote作用 1.启动SystemServer Zygote准备好一些常用类,JNI函数,主题资源,共享库 2.孵化应用进程 因此, 在Android中, 应用程序运行前, 通过Zygote进程共享已运行的虚拟机的代码与内存信息, 缩短应用程序运行所耗费的时间. 也就是说, Zygote进程会事先将应用程序要使用的Android Framework中的类与资源加载到内存中, 并组织形成所用资源的链接信息. 这样, 新运行的Android应用程序在使用所需资源时不必每次形成资源的链接信息, 这样就大大提升了程序的运行时间. Zygote进程起到了预加载资源和类到虚拟机 加快启动应用程序的作用 android大致的启动三段式 进程启动 -> 准备工作 -> loop循环(接收消息,处理消息 socket,messagequeue消息,binder驱动发来的消息) 1.zygote 启动流程 Init 进程。 init.rc 定义了一些要启动的服务, zygote是其一 红色 服务 名称 , 蓝色 文件路径 , 橙色 启动参数 fork 函数 复制父进程给子进程,返回pid=0位子进程 调用app_main.cpp的main函数中的AppRuntime的start方法来启动Zygote进程 信号处理SIGCHLD 2.启动之后 Zygote的native世界 启动android虚拟机

How do I create a custom binder for a JSON body?

匿名 (未验证) 提交于 2019-12-03 08:56:10
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I am working with the play framework and I would like to create a custom binder for JSON that comes from a POST method. I was trying to do that with a @Global TypeBinder, but that seems to only work for when things come as form encoded (I was digging through Binder.java and it does not seem to consider the POST body for binding and assumes that there is a name prefix in params to use for data). Right now I am taking the approach referenced here that appears to be out of date, so I am assuming things have changed. public class

Binder跨进程通信一:代码实例

匿名 (未验证) 提交于 2019-12-03 00:34:01
进程A与进程B实现通信: 进程A (项目结构) (1).创建aidl文件 interface MyApp { String getName (); String setName ( String name ); } (2).创建类MyAppIml继承MyApp.Stub public class MyAppIml extends MyApp . Stub { private String name ; @Override public String getName () throws RemoteException { return name ; } @Override public String setName ( String name ) throws RemoteException { this . name = name ; return name ; } } (3).创建MyService类 (4).在AndroidManifest.xml配置 < service android :name = ".MyService" > < intent-filter > < action android :name = "com.example.test.binderframwork.MyService" /> </ intent-filter > </ service > (5

binder issues

匿名 (未验证) 提交于 2019-12-02 23:32:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lf12345678910/article/details/53096135 the servicemanager's handle id is 0. #define BINDER_VM_SIZE ((1*1024*1024) -(4096 *2)) #define DEFAULT_MAX_BINDER_THREADS 15 “no address space” (in kernel log):This means that the target process (844) did not have the buffer to fit for 1047436 bytes data for the transaction. <6>[816.318901] binder: 844:1535 transaction failed 29189, size 172-0 <3>[817.554619] binder: 844: binder_alloc_bufsize 1047436failed, no address space <6>[817.554655] binder: 1292:1292 transaction failed 29201, size 1047436-0 <6>[817

ANDROID BINDER机制浅析

匿名 (未验证) 提交于 2019-12-02 22:56:40
Binder是Android上一种IPC机制,重要且较难理解。由于Linux上标准IPC在灵活和可靠性存在一定不足,Google基于OpenBinder的设计和构想实现了Binder。 本文只简单介绍其实现,并重点讨论Binder安全相关的内容。详细的Binder设计与实现分析,参考附录4篇文章。 一、Binder 实现 Android Binder由Client、Server、Service Manager和Binder驱动4个部件组成,下图引自网络。 在类UNIX系统中,进程是相互独立的,一个进程不能访问另一个进程的内存空间。然而内核控制着所有进程,因此可以暴露一个接口用作IPC。在Binder中这个接口就是/dev/binder设备,该设备由Binder内核驱动程序实现。 Binder驱动是整个Binder架构的核心,所有IPC都通过它来实现。 上图的Client与Server可以看作2个进程,其IPC通过对/dev/binder的ioctl实现。从Android源码可以看到,ioctl使用binder_write_read的结构体收发数据。 其中write_buffer包含驱动要执行的命令,read_buffer包含用户层需要执行的命令: binder_write实现对bs->fd的ioctl()操作: bs->fd是打开/dev/binder得到的文件描述符:

浅谈android应用之IPC

二次信任 提交于 2019-12-02 11:38:19
文章目录 1. 前言 2. Binder的由来 3. 什么是Binder 4. Binder机制的意义 5. 通信机制 6. 实现原理 6.1 引言 6.2 代码流程图 6.3 java层调用jni层实现 6.4 jni层调用native层实现 6.5 native层调用驱动层实现 6.6 本章小结 1. 前言 IPC是Inter-Process-Communication的缩写,意思是进程间通信或者跨进程通信。按照操作系统的描述,线程是CPU调度的最小单元,而进程一般指一个执行单元,在移动设备上指一个程序或应用,一个进程可以包含多个线程。常见的IPC方式有以下几种方式: 使用Bundle,通过Intent传递过去 使用文件共享 使用Messenger 使用AIDL 使用Socket通信 使用ContentProvider 使用Binder 下面将binder这个抽出来讲,理解binder对理解整个android系统具有重要意义。 2. Binder的由来 简单的说,Binder是Android平台上的一种跨进程通信技术。该技术最早并不是谷歌公司提出的,它前身是Be Inc公司开发的OpenBinder,而且在Palm中也有应用。后来OpenBinder的作者Dianne Hackborn加入了谷歌公司,并负责Android平台开发的工作,所以把这项技术也带进了Android。

Android系统学习总结2--Binder 机制

人走茶凉 提交于 2019-12-01 14:13:22
Binder 学习 http://blog.csdn.net/ylyuanlu/article/details/6629332 Binder 的应用模型 一个 IPC 通讯我们可以简单的理解成客户端 - 服务器模式,客户端请求服务,服务端接收到客户端请求后处理相应的请求,或可能带回结果返回给客户端。 Binder 机制在 Android 系统的进程间通讯模型总结如下: 1) 客户端通过某种方式得到服务器端的代理对象。从客户端角度看来代理对象和他的本地对象没有什么差别。他可以像其他本地对象一样调用其方法,访问其变量。 2) 客户端通过调用代理对象的方法向服务器端发送请求信息。 3) 代理对象通过 binder 设备节点( /dev/binder ),把用户请求信息发送到 Linux 内核空间(实际上市内存共享),由 binder 驱动获取并发送到服务进程。 4) 服务器进程处理用户请求,并通过 Linux 内核的 binder 驱动返回处理结果给客户端的代理对象。 5) 客户端收到服务端的返回结果。 整个过程大致如上所述,可以想象一下 binder 机制的引入,给进程间的通讯带来什么好处?没错就是线程迁移,就像是一个线程带着参数,进入另一个进程执行,然后带着结果返回,和调用自己的函数一样的效果。 Binder 机制的组成 1) binder 驱动: binder

腾讯、网易云、字节跳动面试点总结—AMS在Android起到什么作用?

谁说我不能喝 提交于 2019-12-01 05:40:02
本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: AMS在Android起到什么作用,简单的分析下Android的源码 心理分析:这道题在发生在大多数场景下。面对这道题 很多求职很茫然,不知道该如何说起。AMS本身比较复杂难以理解。工作多年也很难弄清AMS的作用,其实我们大可从以下几点入手组件启动、进程切换、Crash异常入手 求职者:AMS难以表述 我们就从最熟知 的Activity启动入手,逐步深入和分析,用定力告诉面试官,我层深入研究过。接下来我们从五条线分析AMS作用及机制 概述 相信大多数动脑同学对文章中提到的ActivityManagerService(以后简称AMS)都有所耳闻。 AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要。 AMS是碰到的第一块难啃的骨头[①],涉及的知识点较多。为了帮助读者更好地理解AMS,接下来将带小伙伴么按五条不同的线来分析它。 第一条线:同其他服务一样,将分析SystemServer中AMS的调用轨迹。 第二条线:以am命令启动一个Activity为例,分析应用进程的创建、Activity的启动,以及它们和AMS之间的交互等知识。 第三条线和第四条线

【Android进阶】浅析Android Binder机制

北城余情 提交于 2019-11-30 10:32:32
在Android开发过程中,Binder的身影无处无处不在,我们编写的程序都使用过Binder机制(例如startActivity的执行过程)但是请问你知道什么是Binder么?在开发过程中你察觉到它的存在了么? 什么是Binder Biner翻译过来是“胶水“的意思,这个翻译分形象。Binder的主要工作就是淡化了进程边界,淡化了进程间通信的过程。要是想更好的理解Binder就必须从Linux进程谈起。 Linux进程 为了保护进程空间不被别的进程破坏或者干扰,Linux中的进程是相互独立的,也就是所谓的进程隔离。(而且一个进程的内存空间还被分为了用户空间和内核空间,二者也是相互隔离的。这里不做探讨)所以在Linux中,进程与进程之间是相互隔离的,而且进程中的用户和内核空间也是隔离的。 也就是说为了安全和独立,一个进程是不能直接操作或者访问另外一个进程的内存空间的。他们之间既然是隔离的,在需要通信、协作的时候就需要使用进程间通信技术(即IPC,也称跨进程通信),我们都知道Android框架是建立在Linux之上的,当然也会面对进程间通讯的问题。 为什么使用Binder 在Linux系统中为了达到进程间通讯的目的,我们可以选用诸如管道、Socket等技术手段,那么为什么Android选用了Binder这种新型的IPC技术,放弃了原有成熟的技术呢? 主要有如下两个方面: 1.