1

最近在学习Android的资源管理时,遇到了一些有趣的问题。

1)从Android运行时的内部来看,android OS是通过哪些步骤来启动一个已安装的应用程序?

2) R 类- R 类是资源静态数值的容器。但最后它是整数的集合。android如何在内部将这些整数映射到资源?

setContentView(R.layout.activity_main); 

这里setContentView()传递的是一个int。但这映射到 activity_main.xml 文件。

字符串等资源也是如此。资源文件、代码和 R 类之间的连接在运行时似乎有点混乱。

4

2 回答 2

1

1)从Android运行时的内部来看,android OS是通过哪些步骤来启动一个已安装的应用程序?

如果应用程序在安装后第一次启动,Android 系统必须执行以下 3 个步骤
1.加载并启动应用程序
2.在应用程序启动后立即显示一个空白启动窗口 &
3.为应用程序。
这些是android系统的职责。

一旦 android 运行时通过上述步骤创建了应用程序进程,则控制权由应用程序进程本身执行,以执行进一步的步骤以完全使应用程序及其组件可用于执行。其中包括以下内容,
1. 创建应用程序对象。
2.启动主线程或UI线程。
3. 创建主活动实例。此活动通常具有用户在启动后看到的应用程序 UI
4. 活动中包含的膨胀视图。这包括 ViewGroup/视图层次结构中的所有视图
5. 布置屏幕。
6. 执行初始抽签。

2) R 类- R 类是资源静态数值的容器。但最后它是整数的集合。android如何在内部将这些整数映射到资源?

Android Build 系统有很多工具,其中 1 个称为aapt工具,这个工具是生成 R 类的工具,其中包含 res/ 目录中所有资源的资源 ID。对于每种类型的资源,都有一个 R 子类(例如,R.drawable对于所有可绘制资源),并且对于该类型的每种资源,都有一个静态整数(例如,R.drawable.icon)。

所以现在你的应用程序的所有非代码内容都在 R.java 中。Android 资源系统跟踪与应用程序关联的所有非代码资产,这是管理所有资源 ID 映射的内部系统,除此之外,Android 框架还有一个名为 的类Resources,您可以使用该类访问应用程序的资源,R.java由android构建系统打包成。

您通常可以使用getResources().

于 2019-03-21T03:17:00.877 回答
0

R 类将资源 id 与编译时构建的资源进行映射,其中保留了 xml 中所有资源的 id。

Android API 使用运行时中的 id 自行查找资源。

于 2017-09-24T10:09:54.490 回答