除去熟悉的ams、pms、wms之外,系统中还具有各式各样形形色色的service,同样作为service,其启动形式上有很大差别

(一)由SystemService和SystemServiceManager控制

SystemService作为一个运行在SystemServer的基类,为用户需要实现的service提供了一套生命周期,就跟Activity类似的一套周期,需要用户override部分生命周期函数来保证正常工作

onStart():让service跑起来,跑起来之后需要调用publishBinderService将service注册到ServiceManager(本质上就是通知servicemanager来add这样一个service)

onBootPhase(int):这个函数应该是systemserver在启动的时候会多次调用,参数代表当前启动进行到了什么阶段,用户定义的service针对各个阶段需要做怎样的处理或者是不做任何处理

例子:mount service中,当phase处于PHASE_ACTIVITY_MANAGER_READY,也就是Activitymanager准备就绪之后,mount service就要做这步操作

@Overridepublic void onBootPhase(int phase) {if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {mMountService.systemReady();}}

这类继承了SystemService的类,很容易能够被管理起来,又声明周期来进行控制

但是针对以前设计的Service,例如很多Service并非继承自SystemService的,而是继承自各类interface的。这种service就在内部定义了一个静态内部类,LifeCycle继承子SystemService,来辅助完成控制。

如MountService中就定义了一个这样的静态内部类

public static class Lifecycle extends SystemService {private MountService mMountService;public Lifecycle(Context context) {super(context);}@Overridepublic void onStart() {mMountService = new MountService(getContext());publishBinderService("mount", mMountService);}@Overridepublic void onBootPhase(int phase) {if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {mMountService.systemReady();}}@Overridepublic void onStartUser(int userHandle) {mMountService.onStartUser(userHandle);}@Overridepublic void onCleanupUser(int userHandle) {mMountService.onCleanupUser(userHandle);}}

SystemServer中启动MountService的时候

private static final String MOUNT_SERVICE_CLASS ="com.android.server.MountService$Lifecycle";
......
mSystemServiceManager.startService(MOUNT_SERVICE_CLASS);

首先定义了一个内部类的字符串,利用反射来加载这个类

public SystemService startService(String className) {final Class<SystemService> serviceClass;try {serviceClass = (Class<SystemService>)Class.forName(className);} catch (ClassNotFoundException ex) {
......}return startService(serviceClass);}

启动这个类

public <T extends SystemService> T startService(Class<T> serviceClass) {
Constructor<T> constructor = serviceClass.getConstructor(Context.class);service = constructor.newInstance(mContext);
......
mServices.add(service);
......
service.onStart();
......
}

这里就调用了SystemService的生命周期,将service启动起来了

(二)第二类Service,就仅仅实现了要提供给外面的接口,不涉及生命周期的管束。

PackageManagerService就是这类,SystemServer都是去显示调用它的主要生命函数,例如main等

走形式上service大概就这两类吧,以后遇到新的就再补充@.@

原文地址: https://zhuanlan.zhihu.com/p/20510083

Android Service 形式分类相关推荐

  1. Android开源项目分类汇总-转载

    太长了,还是转载吧... 今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有 ...

  2. android service 学习(下)

    android service 学习(下) 通常每个应用程序都在它自己的进程内运行,但有时需要在进程间传递对象,你可以通过应用程序UI的方式写个运行在一个不同的进程中的service.在android ...

  3. Android开源项目分类汇总[转]

    Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析 欢迎加入 QQ 交流群:383537512(入群理由需要填写 ...

  4. Android service 和 client的进程通信和消息回调--AIDL

    2019独角兽企业重金招聘Python工程师标准>>> (一)项目介绍 Launcher上播放小视屏和独立的视频应用.小视屏是视频应用的裁剪版,只有播放的功能,两者使用相同的底层系统 ...

  5. android demo示例代码,Android Service demo例子使用详解(示例代码)

    Android Service demo例子使用详解\ 概述 Service 是 Android 的四大组件之一,它主要的作用是后台执行操作,Activity 属于带有 UI 界面跟用户进行交互,而 ...

  6. 2016年GitHub上史上最全的Android开源项目分类汇总

    以下内容为转载 版主原网址 http://itindex.net/detail/51896-github-android-开源 GitHub上史上最全的Android开源项目分类汇总 今天在看博客的时 ...

  7. Android 开源项目分类汇总(下)

    Android 开源项目分类汇总(下) 九.ScrollView Discrollview 支持滚动时 Item 淡入淡出,平移,缩放效果的 ScrollView 项目地址:https://githu ...

  8. Android系统(168)---Android 开源项目分类汇总

    Android开源项目分类汇总 原网址:https://blog.csdn.net/prince77qiqiqq/article/details/51338330 Android 开源项目第一篇--个 ...

  9. [转]Android 开源项目分类汇总

    Android 开源项目分类汇总,更全更新可见 codekk.com Other: English Version, 繁體版, Website Version. 我们的微信公众号:codekk.二维码 ...

最新文章

  1. HDU5900 QSC and Master(区间DP + 最小费用最大流)
  2. 边工作边刷题:70天一遍leetcode: day 92
  3. 13个开发者技能必知必会!
  4. 数组之间的计算matlab,matlab中的矩阵运算和数组运算方法
  5. java怎么接收前端请求_前端json post 请求 后端怎么接收
  6. C#/ASP.NET完善的DBHelper,配套Model生成器
  7. 常用JS验证函数总结
  8. 毕业设计~在线教育系统
  9. 软件项目管理第4版课后习题[附解析]第九章
  10. 电精2(电神魔傀2) android版本下载
  11. java字符常量_字符常量 java
  12. 武汉大学计算机学院易碧波,王峰(武汉大学计算机学院副教授)_百度百科
  13. 今天许多的家庭有计算机英语,高一上学期英语作文范文
  14. KEIL4 的操作技巧
  15. RestTemplate技术预研——OkHttp
  16. 这些年我用过的 6个API 接口文档平台,真的好用
  17. 转录因子和组蛋白修饰研究思路 | DNA蛋白互作专题
  18. 20种洛杉矶天使之城电影luts调色预设
  19. 二、NovAtel Connect 1.80 版本 操作说明书
  20. HF-Net(一)基于NetVLAD的global descriptor的特征提取

热门文章

  1. 《微信企业号开发日志》之企业号接入
  2. 时频分析:短时傅立叶变换实现(4)
  3. MATLAB函数记录
  4. [云炬创业学笔记]第三章商业创意的发掘与评估测试4
  5. 云炬创业政策学习笔记20210111
  6. ModuleNotFoundError: No module named 'mpl_toolkits.basemap'
  7. MFC子对话框初始化问题_从一个“断言”报警说起
  8. 在C#程序中实现插件架构
  9. 23种设计模式C++源码与UML实现--原型模式
  10. 库函数、系统调用和内核函数的区别