笔记
来源:互联网 发布:优盘数据恢复软件 编辑:程序博客网 时间:2024/06/06 13:57
前言:
android系统是基于linux系统的多进程系统;
android系统从启动开始,顺序启动三个重要的进程init,zygote,systemServer; //前俩个涉及到c、cpp,搞不定,下一步再说 ##
SystemServer
官方解释:SystemServer是android系统java层框架的核心,维护着android系统核心服务
自己解释:mmp,现阶段SystemServer就是祖宗,得从SystemServer开始把他的子孙搞个遍
SystemServer启动重要的服务(AMS,WMS,等)
//SystemServer是有入口的public static void main(String[] args) { new SystemServer().run();}//以AMS为例private void run() { //1.其他也很重要的事略 //2.启动系统服务的核心方法 startBootstrapServices(); startCoreServices();//启动一些服务如BatteryService,UsageStatsService以后再说 startOtherServices();}//1.创建amsprivate void startBootstrapServices() { mActivityManagerService = mSystemServiceManager.startService(ActivityManagerService.Lifecycle.class).getService(); mActivityManagerService.setSystemServiceManager(mSystemServiceManager); mActivityManagerService.setSystemProcess();}private void startOtherServices() { mActivityManagerService.systemReady()}
ams启动有三个关键方法:
1.mSystemServiceManager.startService(ActivityManagerService.Lifecycle.class).getService()
2.mActivityManagerService.setSystemProcess()
3.mActivityManagerService.systemReady()
startService:初始化服务
public <T extends SystemService> T startService(Class<T> serviceClass) { final String name = serviceClass.getName(); //构造器 Constructor<T> constructor = serviceClass.getConstructor(Context.class); //反射创建 service = constructor.newInstance(mContext); return service;}//结合上面参数ActivityManagerService.Lifecycle.class,看看Lifecyclepublic static final class Lifecycle extends SystemService { private final ActivityManagerService mService; public Lifecycle(Context context) { super(context); //创建Lifecycle的同时,创建了ActivityManagerService mService = new ActivityManagerService(context); } @Override public void onStart() { mService.start(); } public ActivityManagerService getService() { return mService; }}//再看ActivityManagerService的构造干嘛了public ActivityManagerService(Context systemContext) { mHandlerThread = new ServiceThread(TAG, THREAD_PRIORITY_FOREGROUND, false /*allowIo*/); mHandlerThread.start(); mHandler = new MainHandler(mHandlerThread.getLooper()); //主线程消息循环 mUiHandler = mInjector.getUiHandler(this); //创建 /data/system/文件夹 File dataDir = Environment.getDataDirectory(); File systemDir = new File(dataDir, "system"); systemDir.mkdirs(); //看门狗,ams停止响应,杀掉systemServer,导致重启 Watchdog.getInstance().addMonitor(this); //看门狗,mHandler消息队列阻塞,杀掉systemServer,导致重启 Watchdog.getInstance().addThread(mHandler);}
setSystemProcess: 添加至系统服务管理进程ServiceManager中,并调整该服务进程的优先级
public void setSystemProcess() { try { //注册到系统的ServiceManager ServiceManager.addService(Context.ACTIVITY_SERVICE, this, true); ServiceManager.addService(ProcessStats.SERVICE_NAME, mProcessStats); ServiceManager.addService("meminfo", new MemBinder(this)); ServiceManager.addService("gfxinfo", new GraphicsBinder(this)); ServiceManager.addService("dbinfo", new DbBinder(this)); if (MONITOR_CPU_USAGE) { ServiceManager.addService("cpuinfo", new CpuBinder(this)); } ServiceManager.addService("permission", new PermissionController(this)); ServiceManager.addService("processinfo", new ProcessInfoService(this)); //由上面那些可以知道ams管理者很多功能 ApplicationInfo info = mContext.getPackageManager().getApplicationInfo( "android", STOCK_PM_FLAGS | MATCH_SYSTEM_ONLY); mSystemThread.installSystemApplicationInfo(info, getClass().getClassLoader()); synchronized (this) { ProcessRecord app = newProcessRecordLocked(info, info.processName, false, 0); app.persistent = true; app.pid = MY_PID; app.maxAdj = ProcessList.SYSTEM_ADJ; app.makeActive(mSystemThread.getApplicationThread(), mProcessStats); synchronized (mPidsSelfLocked) { mPidsSelfLocked.put(app.pid, app); } //调整进程调度优先级 updateLruProcessLocked(app, false, null); //调整OOM_ADj值(查看分配内存的依据值) updateOomAdjLocked(); } } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException( "Unable to find android system package", e); }}
systemReady:启动的状态设置等
public void systemReady(final Runnable goingCallback, BootTimingsTraceLog traceLog) { traceLog.traceBegin("PhaseActivityManagerReady"); synchronized(this) { mAppOpsService.systemReady(); mSystemReady = true; } ArrayList<ProcessRecord> procsToKill = null; synchronized(mPidsSelfLocked) { for (int i=mPidsSelfLocked.size()-1; i>=0; i--) { ProcessRecord proc = mPidsSelfLocked.valueAt(i); if (!isAllowedWhileBooting(proc.info)){ if (procsToKill == null) { procsToKill = new ArrayList<ProcessRecord>(); } procsToKill.add(proc); } } } synchronized(this) { if (procsToKill != null) { for (int i=procsToKill.size()-1; i>=0; i--) { ProcessRecord proc = procsToKill.get(i); Slog.i(TAG, "Removing system update proc: " + proc); removeProcessLocked(proc, true, false, "system update done"); } } // Now that we have cleaned up any update processes, we // are ready to start launching real processes and know that // we won't trample on them any more. mProcessesReady = true; } //利用removeProcessLocked方法,把优先于ams的进程都关闭 //启动launcher startHomeActivityLocked(currentUserId, "systemReady");}
小结:SystemServer作为android系统中重要的进程。
他的作用有:加载了“android—servers”库,创建了系统的context,最主要的是创建了启动了android系统中重要的服务(ams,wms,pms,等等)
这样一个android设备的功能就能正常的运行。
至于每一个系统级服务怎么添加到ServiceManager中(被管理和获取),怎么运作等,一步步分析