首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android源码分析--应用程序启动

    应用程序启动,又可称为根Activity的启动。但是在讲应用程序启动之前,我们有必要对应用程序进程(AppProcess)启动有所了解,那是因为启动一个应用程序首先要保证该应用程序的进程已经被启动。...AMS在启动应用程序时,会先检查应用程序进程是否存在,如果不存在就需要请求Zygote进程创建并启动应用程序进程。这里我不会贴上大段大段的代码,只是一些总结,并提供了相关源码的链接。...应用程序进程(AppProcess)启动 启动大纲 AMS发送启动应用程序进程请求. Zygote接收请求并创建应用程序进程....---- 应用程序(App)启动 讲完了应用程序进程(AppProcess)启动的相关内容后,接下来我们就来看看应用程序是如何一步一步启动的。 启动大纲 1.Launcher请求AMS。...---- 应用程序启动的进程关系图 应用程序启动的过程中,主要涉及了Launcher进程、SystemServer进程、Zygote进程和应用程序进程这四个进程,它们之间的关系如下。

    59720

    应用程序进程启动过程

    1.AMS在启动应用程序时会检查者应用程序需要的应用进程是否存在,不存在就会请求Zygote进程启动需要的应用程序进程 2.Zygote的Java框架层中会创建一个Server端的Socket,这个Socket...用来等待AMS请求Zygote来创建新的应用程序进程 3.Zygote进程通过fock自身创建应用程序进程,这样应用程序进程就会获得Zygote进程在启动时创建的虚拟机实例。...当然还创建了Binder线程池和消息循环,这样运行在应用进程中的应用程序就可以方便地使用Binder进行进程间通信以及处理消息了 应用程序进程启动过程 第一步:AMS发送启动应用程序进程请求 ?...第二步:Zygote接收请求并创建应用程序进程 ?...其中: 4.ZygoteInit类的zygoteInit方法会启动Binder线程池 5.将当前线程注册到Binder驱动程序中,这样我们创建的线程就加入了Binder线程池中,新创建的应用程序进程就支持

    73320

    Android应用程序进程启动过程(后篇)

    前言 在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环。...注释1调用PoolThread的run函数来启动一个启动一个新的线程。...根据上一篇文章我们得知,mMethod指的就是ActivityThread的main函数,mArgs 指的是应用程序进程的启动参数。...注释1处在当前应用程序进程中创建消息循环,注释2处创建ActivityThread,注释3处调用Looper的loop,使得Looper开始工作,开始处理消息。...可以看出,系统在应用程序进程启动完成后,就会创建一个消息循环,用来方便的使用Android的消息处理机制。

    72870

    应用程序同时只启动一次

    命名的内核对象 利用 内核中的命名对象 名称不能重复这一特性,来实现 应用程序的只启动一次的请求。...TRUE表示创建锁线程所拥有这个锁,反之则表示没有线程占用这个锁   LPCTSTRlpName // 指向互斥对象名   ); 使用锁来实现应用程序启动一次...,则认为应用程序已经启动 if (GetLastError() == ERROR_ALREADY_EXISTS) { printf("应用程序实例已经启动!...唯一的锁名 第一节中给出的例子,如果另外的应用程序刚好也创建了一个名为"TestForApp"名字的锁,将会导致此应用程序无法启动。那如何保证锁名的唯一性呢?...CreateMutex(NULL, FALSE, szMutexName); if (GetLastError() == ERROR_ALREADY_EXISTS) { printf("应用程序实例已经启动

    91620
    领券