Android系统在新进程中启动自定义服务过程(startService)的原理分析

发布时间 : 星期四 文章Android系统在新进程中启动自定义服务过程(startService)的原理分析更新完毕开始阅读

??? java.lang.ClassLoader cl = packageInfo.getClassLoader(); ??? service = (Service) cl.loadClass(data.info.name).newInstance();

Step 19. Obtain Service

这一步也是实现在上面的ActivityThread.handleCreateService函数中。上面通过ClassLoader.loadClass来导入自定义的服务类shy.luo.ashmem.Server并且创建它的一个实例后,就通过强制类型转换得到一个Service类实例。前面我们说过,自己的服务类必须要继承于Service类,这里就体现出来了为什么要这样做了。 Step 20. Service.onCreate

这一步继续实现在上面的ActivityThread.handleCreateService函数中:

view plain

??? service.onCreate();

因为这里的service实际上是一个shy.luo.ashmem.Server类实例,因此,这里就是执行shy.luo.ashmem.Server类的onCreate函数了:

view plain

??? public class Server extends Service { ??? ??? ...... ???

??? @Override

??? public void onCreate() { ??? ...... ??? ??? } ???

??? ...... ??? }

至此,这个自定义的服务就启动起来了。

这样,Android系统在新进程中启动服务的过程就分析完成了,虽然很复杂,但是条理很清晰。它通过三次Binder进程间通信完成了服务的启动过程,分别是:

一. Step 1至Step 7,从主进程调用到ActivityManagerService进程中,完成新进程的

创建;

二. Step 8至Step 11,从新进程调用到ActivityManagerService进程中,获取要在新进程启动的服务的相关信息;

三. Step 12至Step 20,从ActivityManagerService进程又回到新进程中,最终将服务启动起来。

学习完Android系统在新进程中启动服务的过程后,希望读者对Android系统的Service有一个深刻的理解。在编写Android应用程序的时候,尽量把一些计算型的逻辑以Service在形式来实现,使得这些耗时的计算能在一个独立的进程中进行,这样就能保持主进程流畅地响应界面事件,提高用户体验。

转自:http://blog.csdn.net/luoshengyang/article/details/6677029 分类: Android之Service

联系合同范文客服:xxxxx#qq.com(#替换为@)