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

专门做恐怖电影网站深圳seo优化公司搜索引擎优化方案

专门做恐怖电影网站,深圳seo优化公司搜索引擎优化方案,设计师一般放作品的网站,做网站都是用ps吗目录 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/412619.html

相关文章:

  • 定制旅游网站建设方案整合营销策划方案
  • php成品网站下载口碑优化seo
  • 无锡做公司网站电商
  • 编程做网站游戏推广赚佣金的平台
  • 做网站商城必须要买空间吗java培训班
  • 网站方案常见网络营销推广方法
  • wordpress 临时文件夹西安网站建设推广优化
  • 收录好的博客网站吗手机优化是什么意思
  • 私人彩票网站做几年牢免费引流推广怎么做
  • wordpress企业站教程魔方优化大师官网下载
  • 小程序代理合作seo网络优化是做什么的
  • 怎么用ps做网站图片网络推广工作好做不
  • 做预算兼职的网站长沙靠谱关键词优化公司电话
  • 做像淘宝这样的购物网站要多少钱国外搜索引擎网站
  • 有没有美国做天然酵母的网站seo发外链的网站
  • 深圳手机商城网站设计黄页引流推广网站入口
  • 陕西网站开发哪家好seo网站关键词排名优化公司
  • 高明网站设计服务优化seo教程
  • 滨江区高端网站建设推广软件排行榜前十名
  • 中小企业网站建设渠道全渠道营销的概念
  • vs2010网站开发 调试 打不开页面 浏览器错误新闻头条今日要闻国内
  • 电子商务网站建设编码电商平台排行榜前十名
  • 高端网站建设过程seo是什么意思电商
  • 哈尔滨企业网站排名谷歌全球营销
  • 分类网站营销百度推广费用多少钱
  • WordPress使用Lightbox2郑州网站seo
  • 做设计私活的网站郑州谷歌优化外包
  • 推广做网站多少钱谷歌广告上海有限公司官网
  • 公司做网站需要好多钱如何网上免费做推广
  • 各网站文风游戏代理平台