Android学习 — Activity 与进程的关系

在启动 Activity 时,总是直接调用 startActivity() 函数,网络总会查到说 Activity/Service 等四大组件都是运行在主线程的,一直有些误解。看了些文章,希望记录一下自己的理解和心得。

当调用 startActivity() 后,会与 ActivityServiceManager(AMS)进行交互,直到调用 startSpecificActivityLocked() 函数。由其判断该 Activity 所属进程是否已经启动,若启动,则在此进程中直接启动该组件;否则,通过 startProcessLocked() 调用启动进程流程。

由 AMS 与 Zygote 进行交互(LocalSocket),使其 fork 出 APP 的子进程。当子进程创建成功后,将通过反射调用 ActivityThread 类,使其加载到该 APP 进程中进行运行,管理着应用程序进程中主线程的执行,调度 Activity/Service/Broadcast 和其它操作。

因此,每个 APP 在没有特殊设置的情况下,都对应一个进程,而 ActivityThread 将作为其中的主线程出现,并管理需要启动的 Activity 等四大组件。

PS:Android中的LocalSocket是基于UNIX-domain Socket的,UNIX-domain Socket是在Socket的基础上衍生出来的一种IPC通信机制,因此LocalSocket解决的是同一台主机上不同进程间互相通信的问题。其相对于网络通信使用的socket不需要经过网络协议栈,不需要打包拆包、计算校验,自然的执行效率也高。

本文参考
原文链接:https://blog.csdn.net/qq_30993595/article/details/82747738

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值