在 SystemServiceRegistry 类中,将 netd 注册成系统服务:

registerService(Context.NETD_SERVICE, IBinder.class, new StaticServiceFetcher<IBinder>() {@Overridepublic IBinder createService() throws ServiceNotFoundException {return ServiceManager.getServiceOrThrow(Context.NETD_SERVICE);}
});

此处注册后,可以通过 Context 的 getSystemService 获取此服务。其中服务名 NETD_SERVICE 的值为 “netd”,createService 函数是向 service manager 获取服务的 binder 代理。

在 system/netd/server/main.cpp 的 main 函数中向 service manager 注册了服务:

int main() {...if ((ret = NetdNativeService::start()) != android::OK) {ALOGE("Unable to start NetdNativeService: %d", ret);exit(1);}...IPCThreadState::self()->joinThreadPool();exit(0);
}

看一下 NetdNativeService 的 start 函数:

status_t NetdNativeService::start() {IPCThreadState::self()->disableBackgroundScheduling(true);const status_t ret = BinderService<NetdNativeService>::publish();if (ret != android::OK) {return ret;}sp<ProcessState> ps(ProcessState::self());ps->startThreadPool();ps->giveThreadPoolName();return android::OK;
}

为了简化代码,一般会调用 BinderService 类的 publish 函数进行服务注册:

template<typename SERVICE>
static status_t publish(bool allowIsolated = false,int dumpFlags = IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT) {sp<IServiceManager> sm(defaultServiceManager());return sm->addService(String16(SERVICE::getServiceName()), new SERVICE(), allowIsolated,dumpFlags);
}

其中服务名由 NetdNativeService 的静态成员函数 getServiceName 指定:

static char const* getServiceName() { return "netd"; }

注意使用 BinderService 类注册服务的方式,服务类一般可以继承 BinderService:

class NetdNativeService : public BinderService<NetdNativeService>, public BnNetd

Netd 服务注册过程(Android 10)相关推荐

  1. 【Android 10 源码】深入理解 software Codec2 服务启动

    MediaCodec 系列文章: [Android 10 源码]深入理解 MediaCodec 硬解码初始化 [Android 10 源码]深入理解 Omx 初始化 [Android 10 源码]深入 ...

  2. 推送服务 三星android,三星将在2020年1月开始推送Android 10系统:等太久

    原标题:三星将在2020年1月开始推送Android 10系统:等太久 11月27日消息,据了解,三星将于2020年一月起,开始对其旗下设备进行推送Android 10系统.爆料显示,预计将有28款设 ...

  3. Android 10 根文件系统和编译系统(四):Android源码目录结构

    配套系列教学视频链接: Android 10.0 AOSP源码编译: https://www.100ask.net/detail/p_60a1e037e4b0adb2d864c6d8/6 Androi ...

  4. Android10剪贴板,剪纸堆 Clip Stack - 轻量级剪贴板管理程序(支持 Android 10)

    编辑点评 剪贴板的历史记录这么看 剪纸堆 Clip Stack - 轻量级剪贴板管理程序(支持 Android 10) 介绍 剪纸堆 Clip Stack - 轻量级剪贴板管理程序(支持 Androi ...

  5. Android 10.0 PackageManagerService(三)APK扫描-[Android取经之路]

    摘要:上一节讲解了PKMS的 权限扫描,扫描/system/etc/permissions中的xml,存入相应的结构体中,供之后权限管理使用. 这一节主要来讲讲APK的扫描. 阅读本文大约需要花费15 ...

  6. Android 10.0 PackageManagerService(二)权限扫描-[Android取经之路]

    摘要:PackageManagerService在systemReady()后,进行了/system/etc/permissions中的各种xml进行扫描,进行相应的权限存储,供以后使用 阅读本文大约 ...

  7. Android 10.0 PackageManagerService(一)工作原理及启动流程-[Android取经之路]

    摘要:PackageManagerService是Android系统核心服务之一,在Android中的非常重要,主要负责APK.jar包等的管理. 阅读本文大约需要花费50分钟. 文章的内容主要还是从 ...

  8. Android 10.0 系统服务之ActivityMnagerService-AMS启动流程-[Android取经之路]

    摘要:上一节我们讲完了SystemServer的启动过程,这一节接着上一节的步骤,来讲解ActivityManagerService的启动过程. ActivityManagerService简称AMS ...

  9. Android 10.0 系统启动之SystemServer进程-[Android取经之路]

    摘要:上一节讲解了Zygote进程的整个启动流程.Zygote是所有应用的鼻祖.SystemServer和其他所有Dalivik虚拟机进程都是由Zygote fork而来.Zygote fork的第一 ...

  10. Android 10.0系统启动之init进程-[Android取经之路]

    摘要:init进程是linux系统中用户空间的第一个进程,进程号为1.当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取ini ...

最新文章

  1. 计算机加入到域的注意事项
  2. BZOJ2055 80人环游世界
  3. NR 5G 安全要求和功能
  4. FCN制作自己的数据集、训练和测试 caffe
  5. 《微软文档管理解决方案2007》之一:安装部署 - [SharePoint Server]
  6. mysql 随机update_MySQL随机查询数据与随机更新数据
  7. java redis 商品秒杀_使用redis秒杀出现产品超发现象求解?
  8. e会学安庆师范大学c语言程序设计答案,宜春学院期末考试试卷C语言程序设计(4份,有答案)...
  9. golang http 返回html文件_用Golang写爬虫(三) - 使用goquery
  10. python常用代码大全-python代码大全
  11. java冒泡排序代码详解
  12. photoshop中如何给图片加水印和去水印
  13. 蓝牙标准协议免费下载
  14. 图论最短路 之 弗洛伊德Floyd(详细分析)
  15. 用 JS 点击左右按钮 使图片切换 - 最精简版-ljx2380000-ChinaUnix博客
  16. PE——滴水的壳项目
  17. hive常用的函数以及知识
  18. 【PAT甲级 - C++题解】1147 Heaps
  19. 失物招领小程序,失物招领微信小程序,校园失物招领小程序系统毕设作品
  20. 与书的相逢,是一场美丽的遇见

热门文章

  1. word怎么根据点画曲线_word2010如何画直线,曲线,肘形连接符,曲线连接符,等多种直线和曲线类型...
  2. 妙趣横生的英语单词 看见英语单词头不大(zt)
  3. 用auto.js写一个自动刷快手抖音视频的小玩意
  4. 计算机应用技术企业信息化,计算机应用技术对企业信息化作用
  5. Eclipse将控制台输出信息保存为文件
  6. Python三大神器之pip用法详解
  7. UIM28RS-IE RS485/脉冲二合一28 闭环/开环步进一体机
  8. pdf怎么转换成图片?
  9. 贪心算法的数学证明 (更新中)
  10. .NET获取微信openid