笔记

来源:互联网 发布:优盘数据恢复软件 编辑:程序博客网 时间: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中(被管理和获取),怎么运作等,一步步分析

原创粉丝点击