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

在线花钱做网站百度免费优化

在线花钱做网站,百度免费优化,南宁关键词排名优化外包,会网站开发 不会软件目录 Activity 启动流程详细解析 1. 应用层发起启动请求 1.1 调用 startActivity() 1.2 通过 Instrumentation 转发请求 2. 系统服务处理(AMS 阶段) 2.1 Binder IPC 通信 2.2 AMS 处理流程 2.3 跨进程回调 ApplicationThread 3. 目标进程初始化…

目录

Activity 启动流程详细解析

1. 应用层发起启动请求

1.1 调用 startActivity()

1.2 通过 Instrumentation 转发请求

2. 系统服务处理(AMS 阶段)

2.1 Binder IPC 通信

2.2 AMS 处理流程

2.3 跨进程回调 ApplicationThread

3. 目标进程初始化(ActivityThread 阶段)

3.1 进程创建(Zygote Fork)

3.2 初始化 ActivityThread

3.3 创建 Application 对象

4. 目标 Activity 的创建与生命周期

4.1 处理 AMS 的启动请求

4.2 创建 Activity 实例

4.3 生命周期回调

5. 界面渲染(WindowManager 与 View 系统)

5.1 视图树构建

5.2 视图测量、布局、绘制

5.3 同步到屏幕

6. 流程图解

7. 关键机制深度解析

7.1 Binder IPC 在启动流程中的作用

7.2 启动模式(LaunchMode)的影响

7.3 性能优化点

8. 总结


Activity 启动流程详细解析

Activity 的启动流程是 Android 系统中涉及多个组件协作的核心机制,从用户调用 startActivity() 到目标 Activity 完成界面渲染,整个过程分为 应用层请求、系统服务处理、进程管理、界面渲染 四个阶段,涉及 Binder IPC、AMS、Zygote、ActivityThread、WindowManager 等关键组件。以下是分步骤详细解析:


1. 应用层发起启动请求

1.1 调用 startActivity()
  • 入口:通过 Activity.startActivity(Intent) 或 Context.startActivity(Intent) 发起请求。

  • Intent 参数

    Intent intent = new Intent(this, TargetActivity.class);
    startActivity(intent);
  • 关键操作

    • Intent 封装目标 Activity 的类名、包名、启动模式(launchMode)等信息。

    • 调用 Instrumentation.execStartActivity()(实际执行启动逻辑)。

1.2 通过 Instrumentation 转发请求
  • 跨进程通信入口

    // Activity.java
    Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity(this, mMainThread.getApplicationThread(), mToken, this, intent, requestCode, options);
  • 作用Instrumentation 是系统监控应用与组件交互的“钩子”,负责将启动请求通过 Binder 传递给 AMS


2. 系统服务处理(AMS 阶段)

2.1 Binder IPC 通信
  • 客户端:应用进程通过 ActivityManagerProxy(AMS 的 Binder 代理对象)发送请求。

  • 服务端:请求到达 ActivityManagerService(AMS),执行 startActivity() 核心逻辑。

2.2 AMS 处理流程
  • 步骤

    1. 权限验证:检查调用方是否有权限启动目标 Activity。

    2. 解析 Intent

      • 根据 Intent 中的 ComponentName 解析目标 Activity 信息。

      • 若未显式指定类名,通过 PackageManagerService 匹配隐式 Intent。

    3. 任务栈(Task Stack)管理

      • 根据目标 Activity 的 launchMode(如 standardsingleTop)决定是否复用现有实例或创建新任务栈。

      • 例如:singleTask 会清除目标 Activity 上方的其他 Activity。

    4. 进程检查

      • 若目标 Activity 所属应用进程未启动,触发 Zygote 创建新进程。

      • 若进程已存在,直接复用。

2.3 跨进程回调 ApplicationThread
  • Binder 回调:AMS 通过 IApplicationThread 接口(ActivityThread 的内部类)通知应用进程处理后续逻辑。

  • 关键代码

    // AMS 通过 Binder 调用应用进程的 ApplicationThread.scheduleLaunchActivity()
    app.thread.scheduleLaunchActivity(intent, ...);

3. 目标进程初始化(ActivityThread 阶段)

3.1 进程创建(Zygote Fork)
  • 触发条件:若目标应用进程未启动,AMS 通过 Zygote 进程 fork 新进程。

  • 流程

    1. AMS 向 Zygote 发送 socket 请求。

    2. Zygote 复制自身进程,生成新进程。

    3. 新进程执行 ActivityThread.main() 入口方法。

3.2 初始化 ActivityThread
  • 主线程初始化

    // ActivityThread.java
    public static void main(String[] args) {Looper.prepareMainLooper();ActivityThread thread = new ActivityThread();thread.attach(false); // 绑定到 AMSLooper.loop();
    }
  • 绑定 AMSActivityThread.attach() 通过 Binder 向 AMS 注册应用进程。

3.3 创建 Application 对象
  • 触发:AMS 回调 bindApplication()

  • 流程

    1. 加载 Application 类(通过 ClassLoader)。

    2. 实例化 Application 并调用 onCreate()

    3. 初始化 ContentProvider(按优先级顺序)。


4. 目标 Activity 的创建与生命周期

4.1 处理 AMS 的启动请求
  • 回调入口ApplicationThread.scheduleLaunchActivity()

  • 封装参数:将 AMS 传递的数据封装为 ActivityClientRecord

  • 发送消息:通过 Handler 将启动请求发送到主线程消息队列。

4.2 创建 Activity 实例
  • 反射创建实例

    // ActivityThread.java
    java.lang.ClassLoader cl = appContext.getClassLoader();
    Activity activity = mInstrumentation.newActivity(cl, component.getClassName(), intent);
  • 关键对象

    • ContextImpl:Activity 的上下文环境,持有 ResourcesPackageInfo 等。

    • Window:每个 Activity 关联一个 PhoneWindow 对象。

4.3 生命周期回调
  • 顺序调用

    1. onCreate():初始化界面(setContentView())。

    2. onStart():Activity 可见但未聚焦。

    3. onResume():Activity 进入前台并获取焦点。

  • 触发界面渲染onResume() 完成后,WindowManager 将 DecorView 添加到屏幕。


5. 界面渲染(WindowManager 与 View 系统)

5.1 视图树构建
  • setContentView()

    // Activity.java
    public void setContentView(@LayoutRes int layoutResID) {getWindow().setContentView(layoutResID);initWindowDecorActionBar();
    }
    • PhoneWindow 创建 DecorView 并加载布局文件。

5.2 视图测量、布局、绘制
  • ViewRootImpl:管理视图树的三大流程:

    1. measure():计算 View 的尺寸。

    2. layout():确定 View 的位置。

    3. draw():将 View 绘制到屏幕上。

5.3 同步到屏幕

  • WindowManager.addView()

    // WindowManagerGlobal.java
    ViewRootImpl root = new ViewRootImpl(view.getContext(), display);
    root.setView(view, wparams, panelParentView);
    • ViewRootImpl 通过 Choreographer 监听垂直同步信号(VSync),触发界面刷新。


6. 流程图解

用户调用 startActivity()
        │
        ↓
Instrumentation.execStartActivity()
        │
        ↓ (Binder IPC)
AMS.startActivity()
        │
        ↓
AMS 解析 Intent、检查权限、管理任务栈
        │
        ↓
目标进程是否存在? ── 否 → Zygote fork 新进程
        │
        ↓
AMS 通过 ApplicationThread 回调目标进程
        │
        ↓ (Handler 消息机制)
ActivityThread.handleLaunchActivity()
        │
        ↓
创建 Activity 实例 → onCreate() → onStart() → onResume()
        │
        ↓
WindowManager 添加 DecorView
        │
        ↓
ViewRootImpl 触发 measure/layout/draw
        │
        ↓
界面显示到屏幕


7. 关键机制深度解析

7.1 Binder IPC 在启动流程中的作用
  • 客户端:应用进程通过 ActivityManagerProxy 发送请求。

  • 服务端:AMS 运行在 system_server 进程,通过 Binder 线程池处理请求。

  • 跨进程回调:AMS 通过 IApplicationThread 接口回调应用进程。

7.2 启动模式(LaunchMode)的影响
  • standard:默认模式,每次启动新实例。

  • singleTop:栈顶复用,触发 onNewIntent()

  • singleTask:栈内复用,清除上方 Activity。

  • singleInstance:独占任务栈,全局唯一实例。

7.3 性能优化点
  • 冷启动优化:减少 Application.onCreate() 和首屏 Activity 的初始化耗时。

  • 延迟加载:将非关键操作移至 onResume() 之后或子线程。

  • 主题预加载:使用 windowBackground 避免白屏。


8. 总结

Activity 的启动流程是 Android 系统设计的核心体现,涵盖 IPC 通信、进程管理、组件生命周期、界面渲染 等多个维度。理解此流程有助于:

  • 性能调优:定位启动耗时瓶颈。

  • 问题排查:分析 ANR、界面卡顿等问题的根因。

  • 系统定制:修改 AMS 或 ActivityThread 逻辑实现特殊需求(如插件化、多任务管理)。

http://www.dtcms.com/wzjs/56163.html

相关文章:

  • 网站怎么推广怎么做的网站推广应该怎么做?
  • 个人如何学习做网站百度链接收录提交入口
  • 做win精简系统的网站建立一个企业网站需要多少钱
  • 微金所网站谁做的购买域名的网站
  • 网络推广网站怎么做大型网站seo课程
  • 抖音上做我女朋友网站公司开发设计推荐
  • 武汉建设网站哪家好seo公司官网
  • 网站建设 首选百川互动上海站优云网络科技有限公司
  • 市住房城乡建设委官方网站免费网站免费
  • 乌鲁木齐建设网站武汉本地seo
  • 哪些购物网站用php做的网站加速器
  • 做哪种网站能赚到钱2020最成功的网络营销
  • 中山网站建设文化策划seo网站推广实例
  • 重庆官方网站建设刷网站软件
  • 在线设计 网站源码网络营销工具分析
  • 简述软件开发的一般流程站长工具seo
  • 温州做企业网站google官网入口手机版
  • 找人做的服务器1核2g网站打开速度蛮手机优化软件
  • 柳市网站优化seo整站优化外包
  • seo网站优化方案书陕西优化疫情防控措施
  • 利用wps做网站b站视频推广网站400
  • 怎样能让百度搜到自己的网站优化公司
  • 网站设计需要那些模块深圳seo论坛
  • 网站开发用户功能分析鱼头seo软件
  • 物流网站推广怎么做seo课程简介
  • 广 做网站蓝光电影下载西安百度竞价托管
  • pc网站制作公司百度知道网页版进入
  • 中国新闻社招聘公示深圳seo优化排名公司
  • 2020年购物app排行百度搜索引擎优化的方法
  • 西安 做网站品牌运营中心