`
isiqi
  • 浏览: 16043601 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

android基础知识05:四大组件之service 03:实现机制

 
阅读更多

本文主要介绍service相关内容。包括两篇文章:

android基础知识05:四大组件之service 01

android基础知识05:四大组件之service 02:远程调用

android基础知识05:四大组件之service 03:实现机制

本文介绍service的实现机制。内容来源于最牛网

在远程的Service调用中,Activity和Service到底是怎么沟通的?对于Service的远程调用,一般会在不同的工程中也就是两个不同的进程,那么进程的沟通机制是什么?傻蛋画了一个图来说明。


Android进程在产生时会:1.产生一个主线程。2. 产生Looper对象 3.产生一个消息队列。4.产生一个虚拟机对象来实现Java和C++之间的沟通。通过C/C++层的IPC来实现通讯。
进程间通讯:Android通过IBinder接口来实现进程间的通讯,MyActivity会调用IBinder的transact()函数通过IPC来调用远程的onTransact()函数。

在默认情况下,如果Servie和Activity、BroadcastReceiver在同一个工程里面,那么这些组件都会在同一个进程中执行,并且由主线程负责执行,当然也可以通过配置让其在不同的组件里面执行。

上文中我们谈到了,Service的远程沟通,既当Activity和Service不在一个进程中,它们之间是怎么相互通信的,不过只是停留在原理层面,今天傻蛋写了一个测试程序来进一步说明远程沟通机制。
Android框架的IPC沟通其实是依赖单一的IBinder接口,当Activity端呼叫IBinder接口的transact()函数时,就会透过IPC机制来呼叫远端的onTransact()函数。当调用transact函数之后,Android框架会根据线程的同步机制,等待远端的onTransact()函数执行完毕 并且返回,才继续向下面继续执行。傻蛋画了副图来进一步说明这个过程。
1. JavaBBinder是Android系统底层提供的类,其实它是个代理(代理模式),同时实现了IBinder接口,这样它onTransact()函数就能够调用myBinder的onTransact()函数
2. 当RemoteServiceTransactActivity需要夸进程来执行JavaBBinder的对象时,Android框架从RemoteServiceTransact所在的进程中启动一个线程Thread X来配合Thread A的执行,这样就变成进程内的通信了。
3. 通过这种远程代理的方式,使用者就会感觉到好像是在本地线程中执行程序一样了。


运行结果如下:


从结果我们可以看出Activity运行的线程名是main,Service运行的线程名也是main,不过和前面Activity的那个main不是一个,为了证明这一点我把它改名为main-changed,Binder所运行的线程名为Binder Thread #2 ,用来配合Activity主线程的远程调用。
测试代码如下:

RemoteMusicService.java

RemoteServiceTransactActivity.java

同时在Android Manifest中需要这样来定义这个Service,以便它能够在不同的进程中运行。

自动生成的代码可以发现,这段代码其实是帮我们实现了一个代理类,这个代理能够通过进行不同进程间的通信。我们Activity调用这个代理类,而这个调用远程Service中的方法。从而实现了远程通信。
今天傻蛋自己写了一个底层远程通信的代理类(具体通信方式傻蛋在第6篇中已经讲了),同样实现了远程调用Service的效果。基本结构和ADT自动生成的代码相似,但是清晰了很多,使用方法和第四篇中的使用一某一样,十分通用。


IMyMusicService.java

MyCustomRemoteBinder.java

使用AIDL语言,来让ADT帮助我们自动生成一个Stub类(Binder的子类),来实现不同进程中Service的调用。通过研究ADT本篇是Android Service的思考(7)的完结篇,Service用起来不难,但是理解其中的机制就有一定的难度了,尤其是远程调用一定要对远程代理有深刻的认识才行。本系列设计的源码很多,如果有人需要请加最牛网的群找傻蛋索要。


分享到:
评论

相关推荐

    android基础知识05:四大组件之service 02:远程调用实例程序

    博文android基础知识05:四大组件之service 02:远程调用中关于远程调用service的实例程序

    android基础知识05:四大组件之service 01实例程序

    根据博客内容,写的一个android 服务实例程序

    android基础知识05:四大组件之service 01实例程序2

    android service的实例程序,用于博文http://blog.csdn.net/xianming01/article/details/7341877

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    Android安全开发基础: 四大组件之服务 (Service) Android安全开发基础: 四大组件之广播(Broadcast Receiver) Android安全开发基础: 四大组件之内容提供器(Content Provider) Android安全开发基础: 进程间通信...

    Android高薪之路:Android程序员面试宝典 李宁

    6 1 SQLite基础知识 6 2 SQLite 函数 6 2 1 核心函数 6 2 2 日期和时间函数 6 2 3 聚合函数 6 3 在Android中使用SQLite 6 4 面向对象数据库:db4o 第7章 网络与加密 7 1 客户端Socket 7 2 服务端Socket 7 3 非阻塞I ...

    AndroidComponentPlugin:Android上简单实现四大组件的插件化,供学习使用

    Android上简单实现四大组件的插件化说明:此项目仅用于学习插件化基本的实现思路,在此基础上学习理解四大组件的运行机制。实现插件化的重点在于对Android四大组件和资源加载流程的分析和解读。插件化代码的编写,...

    ANDROID移动开发基础案例教程

    本书从初学者的角度出发,采用案例驱动式教学方法,对Android基础知识进行讲解。在案例设计上力求贴合实际需求,真正做到把书本上的知识应用到实际开发中,非常适合初学者学习。 本书共10章,第1~2章主要讲解...

    learnandroid:学习之Android之旅

    Android基础知识: --------- example01 --------- v1.0: 完成第一个android程序 --------- example02 --------- 备注:Android 四大核心组建之Activity v2.0:演示android程序生命周期;实现Activity之间的跳转以及...

    Android开发音乐播放器

    其中音乐来源于手机本地,使用了Content Provider获取,播放音乐为了能后台播放,则在Service中实现,Activity和Service之间的通讯则利用了广播来实现,所以这个项目对增强Android基础知识来说是个很好的选择。...

    Android入门基础培训.pptx

    Android 四大组件: Activity、Service、Content Provider、BroadcastReceiver UI及基本布局 数据存储:SharedPreferences、文件、SQLite数据库、网络 Android网络通信 volley,xutils ,fjFrameforandroid,hessian...

    移动安全系列教学下载共43份.zip

    Android安全开发基础--3--四大组件之服务 (Service).pdf Android安全开发基础--4--四大组件之广播(Broadcast Receiver).pdf Android安全开发基础--5--四大组件之内容提供器(Content Provider).pdf Android安全...

    Music_List.zip

    这次用Android实现的音乐播放器工程,可以让大家熟练掌握Android程序开发的基本技术,涉及Android 基础知识、UI界面、数据存储、四大组件、网络编程、高级编程等。综合运用UI界面设计、数据存储、Activity(活动)、...

    Android自主学习项目报告(一).doc

    /res/raw不参加编译的资源,不能生 成对应文件) AndroidManifest.xml 清单文件(声明应用程序属性信息,声明组件,声明权限,唯一一个组件BroadcastRec eiver不需在AndroidManifest中注册) (4)四大组件及其常用...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    3.1 View基础知识 122 3.1.1 什么是View 123 3.1.2 View的位置参数 123 3.1.3 MotionEvent和TouchSlop 125 3.1.4 VelocityTracker、GestureDetector和Scroller 126 3.2 View的滑动 129 3.2.1 使用scrollTo/...

    Android开发艺术探索

    3.1 View基础知识 / 122 3.1.1 什么是View / 123 3.1.2 View的位置参数 / 123 3.1.3 Motion Event和Touch Slop / 125 3.1.4 VelocityT racker、Gesture Detector和Scroller / 126 3.2 View的滑动 / 129 ...

    Android开发权威指南 第二版

    , 《Android开发权威指南(第二版)》全面介绍了Android应用开发的各种技术,主要内容包括Android的四大应用程序组件(Activity、Service、Content Provider和Broadcast Receiver)、布局、菜单、控件、资源和本地化、...

    android开发艺术探索高清完整版PDF

    316 9.1 四大组件的运行状态 / 316 9.2 Activity的工作过程 / 318 9.3 Service的工作过程 / 336 9.3.1 Service的启动过程 / 336 9.3.2 Service的绑定过程 / 344 9.4 Broadcast Receiver的工作过程 / 352 9.4.1...

    android实习报告(1).doc

    实习内容: Android主要有四大组件,分别为:Activity 活动、Service 服务、Broadcast receivers 广播接受者、Content Provider 内容提供者。还有上激活组件Intent。 1.Activity Activity就是一个用户可以直接接触...

Global site tag (gtag.js) - Google Analytics