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

济南网站制作哪家最好免费个人网站注册方法

济南网站制作哪家最好,免费个人网站注册方法,简报格式模板,崇明建设镇虹桥村网站Android 系统的启动流程 Android 系统的启动流程可以分为以下几个主要步骤#xff1a; 引导加载器#xff08;Bootloader#xff09;启动#xff1a;当你打开一个 Android 设备时#xff0c;首先启动的是引导加载器。引导加载器负责启动 Android 的核心操作系统。 Linux…Android 系统的启动流程 Android 系统的启动流程可以分为以下几个主要步骤 引导加载器Bootloader启动当你打开一个 Android 设备时首先启动的是引导加载器。引导加载器负责启动 Android 的核心操作系统。 Linux 内核启动引导加载器加载并启动 Linux 内核。Linux 内核负责启动系统的底层硬件并启动 init 进程。 Init 进程启动init 进程是 Linux 系统中的第一个进程PID 1。在 Android 系统中init 进程负责启动一些重要的守护进程和服务例如 Zygote 进程。 Zygote 进程启动Zygote 是 Android 中的一个特殊进程负责孵化Fork出所有其他的应用进程。Zygote 进程在启动时会预加载大量的系统类和资源以此来提高应用启动的速度。 SystemServer 进程启动Zygote 进程会 fork 出一个新的进程来启动 SystemServer。SystemServer 是 Android 系统中的核心服务它管理并提供了许多系统级别的服务例如窗口管理服务、活动管理服务等。 系统服务启动在 SystemServer 进程中会启动各种系统服务。这些服务在系统启动完成后将一直运行为应用程序提供各种服务。 启动 Launcher 应用系统服务启动完毕后Activity Manager Service 会启动设备的 Launcher 应用此时用户可以开始与设备进行交互。 这就是 Android 系统启动的整个过程。请注意这个过程可能会因设备制造商的定制和 Android 版本的不同而有所不同但大体流程是相同的。 Launcher的启动流程 Launcher 的启动过程更具体的说明如下 当 Android 系统启动完成并且所有的系统服务都已经启动后ActivityManagerService AMS会开始处理用户的交互。AMS 是 Android 中负责管理所有活动的系统服务。 AMS 会发送一个包含 ACTION_MAIN 和 CATEGORY_HOME 的 Intent。这个 Intent 的目的是寻找并启动设备上配置为主屏幕HOME的应用通常这就是 Launcher 应用。 这个 Intent 会通过 Android 的 Intent 解析系统寻找所有能够响应这个 Intent 的应用。由于 Launcher 在其清单文件AndroidManifest.xml中声明了相应的 因此它会被选中来响应这个 Intent。 一旦 Launcher 被选中AMS 就会请求 Launcher 启动。如果这是设备第一次启动或者 Launcher 进程尚未启动那么 AMS 会请求 Zygote 启动一个新的进程来托管 Launcher。如果 Launcher 进程已经存在AMS 就会在该进程中启动新的 Launcher 活动实例。 当 Launcher 启动后它会创建并显示用户的主屏幕。这个屏幕上会显示应用的图标、小部件等用户可以通过这个界面启动和切换应用。 startActivity 详细说明 发送 Intent源应用程序App1调用 startActivity 方法传递一个 Intent。该 Intent 包含要启动的目标应用程序App2的 Activity 的信息。 验证权限和 Intent在 ActivityManagerService (AMS) 中startActivity 方法会对 Intent 进行检查和验证。这包括验证调用者的权限查找 Intent 对应的 Activity处理各种启动模式等。 判断目标应用程序进程状态接着AMS 会判断目标应用程序 App2 的进程是否已经存在。如果已经存在AMS 会使用已经存在的进程如果不存在AMS 会向 Zygote 发送请求要求它创建一个新的进程。 创建新的应用程序进程Zygote 在收到 AMS 的请求后会创建一个新的应用程序进程然后在这个进程中创建一个 Application 对象并执行其 onCreate 方法。 创建 ActivityRecord与此同时AMS 会创建一个新的 ActivityRecord 对象来代表要启动的 Activity。 调度启动 Activity然后AMS 会通过 Binder IPC 向新的应用程序进程发送一个 LAUNCH_ACTIVITY 消息。 接收 LAUNCH_ACTIVITY 消息新的应用程序进程在接收到 LAUNCH_ACTIVITY 消息后会创建目标 Activity 的实例然后调用其 onCreate、onStart 和 onResume 方法。 ActivityManagerService 启动 **ActivityManagerService (AMS) **是 Android 中最为关键的系统服务之一它负责管理系统中的进程以及四大组件Activity、Service、BroadcastReceiver 和 ContentProvider的生命周期。这里将详细解释 AMS 的内部启动流程和工作流程 AMS的启动流程 实例化AMS 是在 SystemServer 中被实例化的。SystemServer 会首先创建一个 ContextImpl 对象然后利用这个 ContextImpl 创建 AMS。 服务初始化接下来调用 AMS 的 init 方法进行初始化这个方法会创建和初始化一些需要的数据结构和服务比如 BroadcastQueue、IntentFirewall 和 ActivityStackSupervisor 等。 准备完成完成初始化后调用 systemReady 方法来通知 AMS 系统准备就绪。在这个方法中AMS 会完成一些后期初始化的工作例如启动系统的 Home Activity。 AMS的工作流程 AMS 主要的工作就是管理系统中的四大组件和进程。以下是它们分别的工作流程 Activity的管理AMS 使用 ActivityStackSupervisor 来管理系统中所有的 Activity。当应用程序调用 startActivity 方法时会通过 Binder IPC 机制调用 AMS 中的 startActivity 方法。AMS 会根据 Intent 解析出需要启动的 Activity创建一个 ActivityRecord 对象并添加到 ActivityStack 中。然后AMS 会向应用程序发送 LAUNCH_ACTIVITY 消息告诉应用程序启动新的 Activity。 Service的管理当应用程序调用 startService 或 bindService 方法时AMS 会创建一个 ServiceRecord 对象来保存 Service 的状态。然后AMS 会向应用程序发送 CREATE_SERVICE 或 BIND_SERVICE 消息告诉应用程序创建或绑定 Service。 BroadcastReceiver的管理当应用程序调用 sendBroadcast 方法时AMS 会创建一个 BroadcastRecord 对象保存广播的信息。然后AMS 会将 BroadcastRecord 添加到 BroadcastQueue 中等待处理。 ContentProvider的管理当应用程序调用 getContentResolver().query() 或其他方法时AMS 会查找对应的 ContentProviderRecord然后通过 Binder IPC 机制向目标 ContentProvider 发送请求。 进程的管理AMS 使用 ProcessList 和 ProcessRecord 来管理系统中的进程。当需要创建新的进程时AMS 会向 Zygote 发送请求然后由 Zygote 创建新的进程。同时AMS 也负责进程的调度和回收。 主要信息 startProcessLocked 在 Android 中startProcessLocked() 方法主要是在 ActivityManagerService 中用于启动新的应用进程。这个方法会被系统在需要启动新的应用进程时调用例如当用户启动一个新的应用或者服务需要在新的进程中运行时。以下是一些主要的步骤和操作 检查是否已经存在相同的进程首先系统会检查是否已经存在一个相同名字的进程。如果已经存在则不会再创建新的进程。 检查系统资源限制系统会检查当前的系统资源如内存使用情况等来决定是否有足够的资源启动新的进程。 创建进程记录如果可以启动新的进程系统会创建一个新的 ProcessRecord 对象来保存新进程的信息。 启动新进程使用 Zygote 启动新进程。Zygote 是 Android 中的一个特殊进程它预加载了大量的系统资源和常用库新的应用进程会通过 fork Zygote 进程的方式启动这样可以提高进程启动的速度。 设置进程的参数系统会设置新进程的各种参数例如进程的优先级、所属用户等。 更新系统状态系统会更新当前的系统状态例如更新当前运行的进程列表等。 runOnce **runOnce()**方法在Android的Zygote进程中非常关键它是处理进程启动请求的主要逻辑。 在Android系统中新的应用进程是通过fork Zygote进程来创建的。具体来说当需要启动新的应用进程时系统会通过一个特殊的socket与Zygote进程进行通信向Zygote进程发送一个包含新进程需要的信息的请求Zygote进程在接收到请求后会执行**runOnce()**方法来处理这个请求。 以下是runOnce()方法的主要步骤 读取请求参数runOnce()方法首先会从Zygote socket中读取请求参数这些参数包括新进程的一些信息例如应用的包名、启动类名等。 fork新进程读取完请求参数后runOnce()方法会调用forkAndSpecialize()或forkSystemServer()方法来fork一个新的进程。这两个方法的主要区别在于forkAndSpecialize()方法是用于创建普通的应用进程而forkSystemServer()方法是用于创建System Server进程。 初始化新进程fork新进程后**runOnce()**方法会对新进程进行一些初始化操作例如设置新进程的环境变量、加载应用的dex文件等。 启动新进程的主类初始化完成后runOnce()方法会调用RuntimeInit.zygoteInit()方法来启动新进程的主类。对于普通的应用进程主类通常是应用的Application类对于System Server进程主类是com.android.server.SystemServer类。 返回新进程的PID最后**runOnce()**方法会将新进程的PID返回给系统。这个PID是新进程的唯一标识系统可以使用这个PID来管理新进程。 ActivityThread的main函数 ActivityThread 是 Android 中的一个非常重要的类它是每个 Android 应用程序主线程的入口点也就是应用程序的主线程“main” thread。在 ActivityThread 的 main 方法中执行了一系列的初始化操作来启动和设置应用程序。 以下是 ActivityThread 的 main 方法主要做了哪些事情 设置 Thread 属性主线程的名称会被设置为** “main”**。 创建 Looper在 Android 中主线程需要一个 Looper 对象来处理消息队列。Looper.prepareMainLooper() 方法会创建一个绑定到主线程的 Looper 对象。 创建 ActivityThread 对象创建 ActivityThread 实例并调用其 attach 方法这个方法会完成一些重要的初始化工作包括设置应用的上下文创建应用的 Instrumentation 对象等。 设置 Android 默认的异常处理器如果应用抛出未捕获的异常这个处理器将会被调用。 开始循环通过调用 Looper.loop() 来开始主线程的消息循环。 在应用进程启动后需要向 ActivityManagerService (AMS) 报告是因为 AMS 是 Android 系统中管理所有应用程序生命周期的关键组件。当一个新的应用程序进程被创建时它需要告诉 AMS 它已经启动并且准备好接收指令。此外这也是一个错误检查机制如果 AMS 启动了一个进程但是这个进程在一段时间内没有报告回来那么 AMS 会认为这个进程启动失败会采取相应的操作如重新启动这个进程或者报告一个错误。 启动binder机制 Binder 机制主要在应用程序启动时进行初始化并在其进程生命周期内保持活动状态用于处理进程间通信IPC的请求。关于 Binder 机制的启动这主要发生在应用程序的主线程ActivityThread初始化过程中。 以下是 Binder 机制的启动过程 创建应用的主线程每个** Android** 应用都有一个主线程它是应用程序的入口点。当新的应用程序进程创建时Zygote会复制其内存空间并在新的进程空间中启动应用的主线程。主线程的入口函数是 ActivityThread.main()。 初始化 Looper在 ActivityThread.main() 函数中会调用 Looper.prepareMainLooper() 来为主线程创建一个 Looper。Looper 是一个用于处理消息队列的工具是实现事件驱动编程的关键组件。 创建 ActivityThread 对象接下来会创建一个 ActivityThread 对象并调用其 attach() 方法来进行一些必要的初始化工作。在这个过程中会创建应用的 ContextInstrumentation 对象等。 创建 Binder 线程池在 ActivityThread 的 attach() 方法中会调用 BinderInternal.addGcWatcher() 和 BinderInternal.createBinderThreadPool() 来为当前进程创建 Binder 线程池。 addGcWatcher() 方法会添加一个 GC垃圾回收监听器该监听器会在每次完成 Binder 事务后执行一次 GC以防止 Binder 事务造成的内存泄漏。 createBinderThreadPool() 方法会创建一个 Binder 线程池。这个线程池会在后台运行用于处理来自其他进程的 Binder 请求。 启动消息循环最后主线程的 Looper 对象会调用其 loop() 方法来启动消息循环。在这个消息循环中主线程会不断地从消息队列中取出消息并处理包括处理来自 Binder 线程池的消息。 Binder Native 层 打开 Binder 驱动在 Android 系统启动的过程中会加载 Binder 驱动。在每个进程创建的过程中会打开 /dev/binder 设备这样该进程就可以使用 Binder 驱动进行 IPC 通信了。 映射内存当进程打开 /dev/binder 设备后会通过 mmap 系统调用映射一块内存空间作为进程和 Binder 驱动之间的通信区域。这样进程和 Binder 驱动就可以通过这块共享内存进行数据交换提高了通信效率。 创建 Binder 线程池每个进程都需要创建一个 Binder 线程池来处理来自其他进程的 Binder 请求。Binder 线程池是一个由多个线程组成的线程池每个线程都会使用 ioctl 系统调用进入到 Binder 驱动的等待队列等待来自其他进程的 Binder 请求。 当一个进程通过 Binder 机制向另一个进程发送请求时Binder 驱动会唤醒等待队列中的一个线程来处理这个请求。这个线程会读取共享内存中的数据处理请求并将结果写回到共享内存中。然后这个线程会再次进入到 Binder 驱动的等待队列等待下一次的请求。 冷启动 App 全流程 点击桌面图标后Launcher 应用会构建一个 intent 并发送给 AMS通知 AMS 启动 AppAMS 收到 intent 消息后首先做一些校验然后判断 App 对应的进程是否启动如果没有启动则通知 Zygote 进程启动 AppAMS 通过 socket 与 Zygote 进程通信将必要的启动参数传递过去Zygote 进程收到后通过 fork 调用创建新的进程并且在主进程中将子进程的 pid 返回给 AMS 所在的进程fork 出来的进程也就是 App 进程进程启动后首先会初始化 Binder 机制具体为打开 Binder 驱动、通过 mmap 映射内存缓存启动 binder 线程池App 进程在 Binder 启动后会创建一个 ApplicationThread 的 Binder 实体通过ServerManager 获取 AMS 的 Binder 代理将 ApplicationThread 这个 Binder 传递给 AMSAMS 收到 attach 后保存 ApplicationThread 对象的 Binder 代理对象以方便后续与 App 进程进行通信。AMS 发送 attachApplication 请求该请求最后会在 App 所在进程的 Binder 线程被执行然后构建一个 Message 对象发送给主线程执行 Application 对象的初始化App 的主线程收到消息后构建 LoadedApk 对象该对象存储 App 的一些基本信息紧接着创建 ContentImpl 对象并且通过反射创建 Application 对象接着调用其 attach 方法传入 ContentImpl 对象最后调用其 onCreate 方法再回到 AMS 刚刚通知 App 创建 Application 的位置AMS 在执行完该事后会立马通知 App 启动 launch类型的 Activity 以及一些 service、广播等App 在收到启动首页 Activity 事件后通过反射创建 Activity 对象并且同时创建一个 ContentImpl 对象接着执行 Activity 的 onCreate 方法设置布局文件接下来 onResume 方法中通过 WMS 的 addView 方法将 ViewRoot 中的视图添加到 WMS 中并且视图树会执行 attachToWindow 回调ViewRootImpl 会通过 Choreographer 注册 vsyn 信息在下一个 vsyn 信号到来之后会执行 msasure、layout、draw 在 draw 方法执行完之后其内部通过 canvas 的 api 调用绘制指令这些指令会被记录下来最后通过 RenderThread 线程进行计算执行最终通过 GPU进行渲染渲染的数据会放到 Surface 缓冲区中SufaceFlinger 将所有的窗口对象的 Surface 数据区域进行合成并发送到屏幕的后缓冲区域下一个 vsync 信号到来之后后缓冲区的图像就会显示到屏幕上
http://www.hkea.cn/news/14366350/

相关文章:

  • 什么是一学一做视频网站安徽省建设工程信息网公共服务平台
  • 西安网站定制星裕建设网站
  • 网站备案时间就是正式上线时间吗龙岩网站设计较好的公司
  • 仿做网站的网站桂林市卫生学校
  • 网站建设08国内免费建站平台
  • 中国空间站图片wordpress 显示所有分类
  • 谁能给做网站成都代做网站
  • 常用的做网站的工具都有哪些浙江天力建设集团有限公司网站
  • 特网站建设做文案的网站
  • 辽阳企业网站建设团队网页微信支付
  • 彩票网站建设平台个人网站开发 怎么赚钱
  • 做毕设最常去的几个网站外贸 网站 seo
  • 网站建设公司广告wordpress新闻模板
  • 妇女之家网站建设方案开发公司租赁机械车位价格
  • 韶关做网站公司wordpress的文章调用
  • 网站 推广 实例app界面设计常用的布局有哪些
  • 启航做网站怎么样广州做手机网站信息
  • 培训学校网站建设要点目前网站建设主流技术架构
  • 荆州网站推广怎么做网站后台模版
  • 凡诺网站下载网站开发和app开发
  • 丰城做网站wordpress 插件漏洞
  • 网站建设 客户群晖wordpress 外网
  • 制作网站难不难服装网站建设方法
  • 南宁大型网站设计公司宜昌市城市建设学校网站
  • 成都公司网站seowordpress注册邮箱验证收不到邮件
  • 做网站开发的有哪些公司百度站长平台网址
  • 网络推广培训心得体会广东百度seo
  • 广州网站建设服务商网站开发加维护需要多少钱
  • 永久免费的网站空间win系统的wordpress
  • 营销型网站网站手把手做网站