Android 之 SystemService
来源:互联网 发布:linux run as root 编辑:程序博客网 时间:2024/05/16 13:46
Android 之 SystemService
SystemServer是Android系统的一个核心进程,它是由zygote进程创建的,因此在android的启动过程中位于zygote之后。android的所有服务循环都是建立在 SystemServer之上的。在SystemServer中,将可以看到它建立了android中的大部分服务,并通过ServerManager的add_service方法把这些服务加入到了ServiceManager的svclist中。从而完成ServcieManager对服务的管理。
先看下SystemServer的main函数:
- native public static void init1(String[]args);
- public static void main(String[] args) {
- if(SamplingProfilerIntegration.isEnabled()) {
- SamplingProfilerIntegration.start();
- timer = new Timer();
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
- SamplingProfilerIntegration.writeSnapshot("system_server");
- }
- }, SNAPSHOT_INTERVAL,SNAPSHOT_INTERVAL);
- }
- // The system server has to run all ofthe time, so it needs to be
- // as efficient as possible with itsmemory usage.
- VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);
- System.loadLibrary("android_servers"); //加载本地库android_servers
- init1(args);
- }
在main函数中主要是调用了本地方法init1(args), 他的实现位于../base/services/jni/com_android_server_SystemService.cpp中
- static voidandroid_server_SystemServer_init1(JNIEnv* env, jobject clazz)
- {
- system_init();
- }
进一步来看system_init,在这里面看到了闭合循环管理框架:
- runtime->callStatic("com/android/server/SystemServer","init2");//回调了SystemServer.java中的init2方法
- if (proc->supportsProcesses()) {
- LOGI("System server: enteringthread pool.\n");
- ProcessState::self()->startThreadPool();
- IPCThreadState::self()->joinThreadPool();
- LOGI("System server: exitingthread pool.\n");
- }
通过调用com/android/server/SystemServer.java中的init2方法完成service的注册。在init2方法中主要建立了以ServerThread线程,然后启动线程来完成service的注册。
- public static final void init2() {
- Slog.i(TAG, "Entered the Androidsystem server!");
- Thread thr = new ServerThread();
- thr.setName("android.server.ServerThread");
- thr.start();
- }
具体实现service的注册在ServerThread的run方法中:
- try {
- Slog.i(TAG, "EntropyService");
- ServiceManager.addService("entropy", new EntropyService());
- Slog.i(TAG, "PowerManager");
- power = new PowerManagerService();
- ServiceManager.addService(Context.POWER_SERVICE, power);
- Slog.i(TAG, "ActivityManager");
- context =ActivityManagerService.main(factoryTest);
- Slog.i(TAG, "TelephonyRegistry");
- ServiceManager.addService("telephony.registry", newTelephonyRegistry(context));
- }
0 0
- Android 之 SystemService
- Android 之 SystemService
- Android开发之SystemService
- Android 之 SystemService
- Android 之 SystemService
- Android 之 SystemService
- Android 之 SystemService
- SystemService学习之TELEPHONY_SERVICE
- Android-Adding SystemService
- Android-Adding SystemService
- Android SystemService初体验
- Android SystemService种类
- android SystemService 列表
- SystemService
- SystemService
- SystemService
- SystemService
- SystemService 学习笔记之ConnectivityManager
- Touch事件分发机制
- 本博客已经不再维护与更新
- mysql存储引擎与事务
- HDU 4267 A Simple Problem with Integers (55棵线段树更新维护)
- HDOJ 1008 Elevator
- Android 之 SystemService
- gdkoi2016赛前总结
- 指针偏移疑问。
- 安卓通知的使用系列5:对话框通知的使用之滚动条对话框(圆圈和条形两种形式)
- CodeForces 607 A. Chain Reaction(dp)
- Cpp_I/O流
- Android 集成facebook 第三方登陆
- 在spring mvc与mybatis中加入logback
- 欢迎使用CSDN-markdown编辑器