苍南网站制作,黑河做网站公司,沧州网页制作,网站及app开发现在再回顾一下Application的启动流程#xff0c;总的来说#xff0c;虽然进程的发起是由ATMS服务发起的#xff0c;但是进程的启动还是由AMS负责#xff0c;所以需要调用AMS的startProcess()接口完成进程启动流程#xff0c;AMS要处理的事情很多#xff0c;它将事务交给…现在再回顾一下Application的启动流程总的来说虽然进程的发起是由ATMS服务发起的但是进程的启动还是由AMS负责所以需要调用AMS的startProcess()接口完成进程启动流程AMS要处理的事情很多它将事务交给得力助手ProcessList去完成通过调用ProcessList的startProcessLocked()将进程的启动交给ProcessList对象去管理它类似一个数组里面存放着许多的ProcessRecord对象每个ProcessRecord对象是一个application进程的抽象保存着app进程的各种属性信息和动态数据但是新进程的创建也不是在它手上直接创建的而是由它内部的工具类Process调用ZygoteProcess的start()方法进行创建这个方法的核心功能就是组织准备进程启动所需要的一切资源打包成Argus参数消息然后通过socket发送给ZygoteServer进程ZygoteServer进程有一个runSelecpLoop()循环接收指令的处理当它接收到进程启动的消息后会将消息及其参数内容解析出来然后调用ProcessOneCommand()接口进一步处理包括fork()操作fork成功后需要关闭原Zygote的服务器socket, 以及初始化虚拟机进入nativen层注册初始化binder等这里面还会进入ZygoteConnection类中通过反射的的方法拿到ActivityThread类中的main方法成功执行main函数 这一篇文章可以来详细分析一下执行main函数的过程中又做了什么操作呢大家可以结合下面这张图进行分析 ActivityThread.java-main();AndroidOS.install();Looper.prepareMainLoop();//重要核心代码ActivityThread thread new ActivityThread(); ////之前systemserve调用attach传入的是true,这里到应用进程传入false就行thread.attach(false, startSeq);--//为什么要调用attach函数在里面会调用AMS的attachApplicaation接口final IActivityManager mgr ActivityManager.getService();//问题mAppThread是什么final ApplicationThread mAppThread new ApplicationThread();而ApplicationThread extends IApplicationThread.Stub. 所以mAppThread就是IBinder,是APP给服务端侧使用的IBinder.mgr.attachApplication(mAppThread, startSeq); //通过此接口将APP的IBinder传给AMS--ActivityManagerService.java-attachApplication():--attachApplicationLocked(thread); //此thread就是mAppThread.--thread.bindApplication(); //thread就是APP的Ibinder, 现在这个是在AMS中调用APP的IBinder,就是thread--ActivityThread.java: sendMessage(H.BIND_APPLICATION); //发送消息....会进入handleBindApplication()接收消息处理过程--Application app; //构建applicationapp data.info.makeApplication();--通过反射的方法new出来一个ApplicationnewApplication();--Application app getFactory().instantiateApplication(cl,className);app.attach(context);--application.java-attach():--attachBaseContext(context); //执行application的生命周期之前先执行attachBaseContext这个接口--installContentProviders(); //启动安装provider组件启动provider的生命周期为app运行操作数据库做准备。--installProviders(); //安装provider对其初始化mInstrumentation.callApplicationOnCreate(app);--app.onCreate();//执行Application的onCreate生命周期意味着application已经启动了。ProcessRecord app; //这个就是代表着一个进程。ProcessRecord就等价于Application进程这个进程在framework层的抽象就是ProcessRecord--ProcessRecord里面有一个IApplicationThread thread对象app mPidsSelfLocked.get(pid);//将mAppThread存入ProcessRecord中的IApplicationThread对象中就是IBinder。app.makeActive(thread, mProcessState); //这个thread就是上面的mAppThread.--...thread _thread; //(_thread是参数实参就是mAppThread,应用的IBinder, 这里的thread就是ProcessRecord内的IApplicationThread对象)mProcessList.updateLruProcessLocked(); //把app对应的processRecord给它添加到ProcessList列表中。--mLruProcesses.add(pos, app); //这个ProcessList给AMS使用AMS通过持有ProcessList间接访问ProcessRecord.//最终层层调用到ActivityStackSupervisormAtmInternal.attachApplication(); //mAtmInternal是ActivityTaskManagerInternal--mRootWindowContainer.attachApplication(wpc);//RootWindowContainer.java的一个实 例 --RootWindowContainer::startActivityForAttachedApplicationIfNeeded();//开始activity的生命周期--mStackSupervisor.realStartActivityLocked(r,app,...); //执行activity生命周期流程。Looper.loop();//一直循环保障进程一直执行如果退出说明程序关闭 知识点AMS-持有ProcessList列表每个列表是ProcessRecord对象每一个ProcessRecord对象内持有一个IApplicationThread对象它就是IBinder,也就是说AMS要与某一个APP通信通过这个路线:AMS-ProcessList-ProcessRecord-IAPPlicationThread拿到IBinder然后调Application的服务然后就是可以执行APP的生命周期流程。简化之就是AMS-...-IApplicationThread. application启动时会通过AMS的IBinder远程调用ApplicationThread的BindApplication(),在创建App的时候先创建Application对象然后再进行installProvider等后续的处理处理的过程主要做两件事一个是创建ProcessRecord并登录在ProcessList中然后是开始执行ActivityStackSupervisor的realStartActivityLocked方法开启activity生命周期流程的执行 文章转载自: http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.bpyps.cn.gov.cn.bpyps.cn http://www.morning.cxsdl.cn.gov.cn.cxsdl.cn http://www.morning.nyhtf.cn.gov.cn.nyhtf.cn http://www.morning.bchhr.cn.gov.cn.bchhr.cn http://www.morning.qnbgh.cn.gov.cn.qnbgh.cn http://www.morning.rhmt.cn.gov.cn.rhmt.cn http://www.morning.rqlqd.cn.gov.cn.rqlqd.cn http://www.morning.drndl.cn.gov.cn.drndl.cn http://www.morning.hymmq.cn.gov.cn.hymmq.cn http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn http://www.morning.bpmfl.cn.gov.cn.bpmfl.cn http://www.morning.bryyb.cn.gov.cn.bryyb.cn http://www.morning.tdqhs.cn.gov.cn.tdqhs.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.xtxp.cn.gov.cn.xtxp.cn http://www.morning.neletea.com.gov.cn.neletea.com http://www.morning.fglxh.cn.gov.cn.fglxh.cn http://www.morning.rkdnm.cn.gov.cn.rkdnm.cn http://www.morning.jrkzk.cn.gov.cn.jrkzk.cn http://www.morning.eshixi.com.gov.cn.eshixi.com http://www.morning.dnwlb.cn.gov.cn.dnwlb.cn http://www.morning.bnygf.cn.gov.cn.bnygf.cn http://www.morning.zcyxq.cn.gov.cn.zcyxq.cn http://www.morning.kxltf.cn.gov.cn.kxltf.cn http://www.morning.cbpmq.cn.gov.cn.cbpmq.cn http://www.morning.ftsmg.com.gov.cn.ftsmg.com http://www.morning.mbhdl.cn.gov.cn.mbhdl.cn http://www.morning.srjgz.cn.gov.cn.srjgz.cn http://www.morning.nyqb.cn.gov.cn.nyqb.cn http://www.morning.hrdx.cn.gov.cn.hrdx.cn http://www.morning.ydxg.cn.gov.cn.ydxg.cn http://www.morning.skrxp.cn.gov.cn.skrxp.cn http://www.morning.bfmrq.cn.gov.cn.bfmrq.cn http://www.morning.rbrd.cn.gov.cn.rbrd.cn http://www.morning.fykrm.cn.gov.cn.fykrm.cn http://www.morning.jksgy.cn.gov.cn.jksgy.cn http://www.morning.bqpgq.cn.gov.cn.bqpgq.cn http://www.morning.czgfn.cn.gov.cn.czgfn.cn http://www.morning.xgchm.cn.gov.cn.xgchm.cn http://www.morning.ttxnj.cn.gov.cn.ttxnj.cn http://www.morning.ysnbq.cn.gov.cn.ysnbq.cn http://www.morning.thzgd.cn.gov.cn.thzgd.cn http://www.morning.gcthj.cn.gov.cn.gcthj.cn http://www.morning.frtt.cn.gov.cn.frtt.cn http://www.morning.mlbdr.cn.gov.cn.mlbdr.cn http://www.morning.lsjtq.cn.gov.cn.lsjtq.cn http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.nzfjm.cn.gov.cn.nzfjm.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.kmjbs.cn.gov.cn.kmjbs.cn http://www.morning.bpxmw.cn.gov.cn.bpxmw.cn http://www.morning.wdlyt.cn.gov.cn.wdlyt.cn http://www.morning.qprtm.cn.gov.cn.qprtm.cn http://www.morning.rppf.cn.gov.cn.rppf.cn http://www.morning.sgpny.cn.gov.cn.sgpny.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.hnzrl.cn.gov.cn.hnzrl.cn http://www.morning.bfkrf.cn.gov.cn.bfkrf.cn http://www.morning.twgzq.cn.gov.cn.twgzq.cn http://www.morning.rjfr.cn.gov.cn.rjfr.cn http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com http://www.morning.rcjqgy.com.gov.cn.rcjqgy.com http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn http://www.morning.pwhjr.cn.gov.cn.pwhjr.cn http://www.morning.jrlgz.cn.gov.cn.jrlgz.cn http://www.morning.pakistantractors.com.gov.cn.pakistantractors.com http://www.morning.fjfjm.cn.gov.cn.fjfjm.cn http://www.morning.jxfsm.cn.gov.cn.jxfsm.cn http://www.morning.zrmxp.cn.gov.cn.zrmxp.cn http://www.morning.zxhhy.cn.gov.cn.zxhhy.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.zqfz.cn.gov.cn.zqfz.cn http://www.morning.wphzr.cn.gov.cn.wphzr.cn http://www.morning.xnzmc.cn.gov.cn.xnzmc.cn http://www.morning.ssjry.cn.gov.cn.ssjry.cn http://www.morning.ckwxs.cn.gov.cn.ckwxs.cn http://www.morning.wtnyg.cn.gov.cn.wtnyg.cn