您的位置:首页 > 其它

IPC

2015-12-03 09:45 148 查看
由broadcastreceiver new出一个对象,执行onreceiver方法开启一个activity,然后broadcast对象就delete。

activity通过调用getContentResolve()得到一个ContentProvider对象,然后执行对象的nCreate方法,这个方法会打开open database,可以调用query()对数据进行access

getContentResolve()会返回一个Cursor对象,通过这个对象就可以得到数据

app想利用框架层的资源必须申请,然后由框架层来响应,主导权永远在框架层。

IPC(Inter-Process-Communication)是跨越两个不同进程的通信

在Android里,远程通信是指两个组件分别在不同的进程里执行,两者是IPC通信。

当我们启动一个应用程序(app)时,Android 系统里的Zygote服务孵化(fork)一个新进程(process)给它,然后将它加载到这个新诞生的进程里,一个进程里有一个VM对象、一个主线程、一个Message Queue数据结构、Main Looper类的对象。Android进程希望主线程永远活着,所以不断调用looper,在调用looper的时候,会检查queue里面有没有UI事件,有则响应。所以主线程的主要任务就是处理UI的事件

基于linux的安全限制,以及进程的基本特性(例如:不同进程的地址空间是独立的),如果两个类在同一个进程里执行时,两者沟通方便也迅速

在Android的进程里,有一个虚拟机(Virtual machine)的对象,可执行java代码,也引导JNI本地程序的执行,实现java与c/c++之间的沟通,java代码在虚拟机里执行的,c代码在cpu里执行的

在Androidmanifest中注册组件时注明android:process会另外创建一个进程

每个进程都有一个VM,每个VM都有它的私有数据,会存在VM的数据结构里面。

在Android的各进程里,都有一个VM对象执行java代码,也引导jni本地程序的执行,实现java与c++程序之间的沟通,在c++程序中,也经常回调VM里的java函数。

SQLite和mediaPlay等配件可以纳入框架,也可以纳入插件中,把所有插件结合起来就成为一个APP

IPC通信的三个步骤:

1:activity使用startService()函数来启动Service.service端会调用onStart()函数,new出一个myIBinder对象,接着调用myBinder构造函数,进而调用父类Binder构造函数,转而调用JMI本地的init()函数。

此时执行init()函数时,会在c++层里诞生一个JavaBBinderHolder类别的对象,并且将这个myBinder对象指针存入到JavaBBinderHolder对象里,让avaBBinderhloder对象指向JmyBinder对象

public void onStart()

{mb = new myBinder();}

2:Activity调用bindService()来绑定Service.即activity建立与service之间的连接,通过AMS返回一个IBinder对象给activity

public IBinder onBind(Intent intent){ return mb;}

3:activity调用IBinder接口的transact()函数,透过底层Binder Driver驱动而间接调用到Binder基类的execTransact()函数,转而调用myBinder的onTransact函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: