android - 当你点击 android app 时,android framework 中哪个类最先被盯着
问题描述
我想知道当我单击并启动 Android 应用程序时 Android 是如何工作的。
当我开始android编程时,我了解到“Activity.java”是起点。但这只是从用户和程序员的角度来看。
我想知道它是如何从INSIDE ANDROID工作的。
我意识到在 Activity 类之前有“Application.java”、“ContextImple.java”和“ActivityThread.java”。
当用户单击应用程序图标启动它时,哪些类首先启动?
是否有任何其他课程提前执行?如果有的话,它们是什么,是什么让它开始的?
解决方案
由于 Android 是一个基于 Linux 的操作系统,几乎每个应用程序都运行在自己的进程中,当某些应用程序的代码需要运行时,这个进程是由 Android 创建的。Android 和其他 Linux 发行版之间的一个很大区别是应用程序进程的生命周期由操作系统控制。
应用程序的入口点是可以由用户或系统启动的组件。当Application
您的应用程序/包的进程创建时,该类或您的 Application 类的子类在任何其他类之前被实例化。
有四种不同类型的应用程序组件:
- 活动
- 服务
- 广播接收器
- 内容提供者
应用程序启动可以在以下三种状态之一中进行:
冷启动: app从头开始,系统有3个任务:
- 加载和启动应用程序。
- 启动后立即显示应用程序的空白启动窗口。
- 创建应用程序进程。在创建流程之后,它负责接下来的阶段:
- 创建应用程序对象。
- 启动主线程。
- 创建主要活动。
- 膨胀的观点。
- 布置画面。
- 执行初始抽签。
热启动:将您的活动带到前台
- 热启动:包含在冷启动期间发生的一些操作子集
结论:要构建一个高效的应用程序,重要的是要了解 Android 在应用程序进程的整个生命周期中的行为方式。如果您想深入了解 Android 如何处理内存管理等事情(我认为这对于 android 应用程序开发来说不是必需的),您必须首先了解 Linux 的工作原理,然后尝试了解 Android 源代码
Android Developers 中有完整的参考资料
推荐阅读
- sql - 如何在大查询中显示父子关系的完整层次结构
- java - 如何使用 Web 服务启动/停止/重启 Spring Boot 应用程序
- c++ - 从 .txt 文件 c++ 中读入向量
- flutter - 启动器图标未插入颤振
- bitbucket - Bitbucket Pipe 中的 SSH 密钥和已知主机
- javascript - 没有重定向的 YouTube 订阅按钮/链接
- sdk - 通过 api 端点/SDK/第三方应用程序管理 Xero/Quickbooks/Plooto 员工
- sql-server - SQL - 我无法使用我的公共 IP 访问 SQL Server
- python-3.x - 如何在 Windows 上使用 python 控制键盘的背光
- javascript - 在 Firestore 中,如何查询在日期范围内创建的项目并按不同字段排序?