当前位置: 首页 > news >正文

免费的源码分享网站百度seo优化软件

免费的源码分享网站,百度seo优化软件,哪家公司建换电站,哪种nas可以做网站服务器现在再回顾一下Application的启动流程,总的来说,虽然进程的发起是由ATMS服务发起的,但是进程的启动还是由AMS负责,所以需要调用AMS的startProcess()接口完成进程启动流程,AMS要处理的事情很多,它将事务交给…

现在再回顾一下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.15wanjia.com/news/32729.html

相关文章:

  • 当今做网站的流行趋势网上销售有哪些方法
  • 重庆全网推广深圳seo推广外包
  • 想开一家客服外包公司优化大师电视版
  • 淘客网站做弹窗广告东莞seo网站推广建设
  • 建设电影网站西安计算机培训机构哪个最好
  • 贵南县网站建设公司广东: 确保科学精准高效推进疫情
  • 郑州网站建设+论坛想要导航推广网页怎么做
  • 疫情防控工作新闻发布会郑州seo代理公司
  • 做好政府网站建设工作b站视频推广的方法有哪些
  • 超链接 网站衡阳seo外包
  • 被百度收录的网站有哪些培训课程开发
  • 音乐网站开发的意义如何自己制作一个网站
  • 专门做国外网站怎么快速优化关键词
  • 网站建设 响应式 北京网络营销怎么做?
  • 网站改版多少钱女教师遭网课入侵直播录屏曝
  • 鲜花网站建设的总体目标网站alexa排名查询
  • 网站编辑心得体会辽宁网站建设
  • app源码网站seo营销工具
  • 在线设计工具的网站怎么做优化推广什么意思
  • 品牌工厂网站建设淘宝seo优化是什么意思
  • wordpress 端口修改包头seo
  • 佛山网站优化包年大二网页设计作业成品
  • 网站备案完了怎么做网站排名优化价格
  • 优化方案语文福州seo技巧培训
  • 做公司网站报价百度权重排名
  • 企业网站实施方案谷歌推广怎么样
  • 怎么建设手机网站首页今天的热点新闻
  • 网站建设开发实训总结如何建网站教程
  • 医疗不可以做网站谷歌sem服务商
  • 餐饮系统的网站应该怎么做线上推广策划方案范文