Android的intent,ibinder,service等等

来源:互联网 发布:十八届五中 网络强国 编辑:程序博客网 时间:2024/05/22 08:59

这些概念很容易绞在一起,这篇文章希望能把它们讲清楚。当然,理解不一定正确,持续更新
建议可以先看看 http://developer.android.com/guide/topics/fundamentals/bound-services.html
Android四种组件:activity,service,broadcast receiver和content provider

1. service
对于service,有两种形式,即bound和started service,就是client通过不同方式启动service产生的差异。
前一种通过bindService,后一种通过startService。
先说startService,这就要求你的service实现onStartCommand.并且显式的结束service(用stopself或调用stopService)
对于bindservice, 会首先直接返回,然后在serviceConnection(由client创建并在bind时传给service)的onServiceConnected收到传给client的Ibinder




Service传回来的Ibinder又有几种实现,分别是extending binder class, using a messenger及AIDL(messenger实际上是对AIDL的封装,所以一般情况我们不直接用AIDL)。
直接扩展binder class用于client和service处于同一process的情况。反之就用messenger
我们可以同时实现既有bound又可以binding的service,如下图所示









2. binder


binder是android采用的IPC方式,就像linux的内存共享,管道,socket一样。我们先有这样一种概念,把它想像成连接两个process间的一条通道。而暂时不要去考虑它的具体实现,这样对我们理解问题又有很大帮助,不然什么东西都绞在一起,会让你迷失方向。

3. intent

intent,顾名思义,就是一种意图。换句话说,是一个描述体, 它包含了我们要做的事情。根据这个意图,去寻找能解决实现它的描述的东东(和intent-filter配合)。就如binder一样,我觉得intent也是一种基元。什么意思呢?就是说它们是一种technique, 具有普遍的用途,而不是仅仅局限在某种特定的场合里。带着这样的观念,你可能会更容易看清为什么很多地方都有intent和binder


原创粉丝点击