IPC

由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函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值