android启动应用程序时的过程是什么以及它在运行时如何与R类交互?

问题描述 投票:1回答:2

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

1)从Android运行时的内部角度来看,Android OS采取了哪些步骤来启动已安装的应用程序?

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

setContentView(R.layout.activity_main); 

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

与字符串等资源相同。资源文件,代码和R类之间的连接在运行时似乎有点混乱。

android dalvik internals art-runtime
2个回答
1
投票

1)从Android运行时的内部角度来看,Android OS采取了哪些步骤来启动已安装的应用程序?

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

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

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

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

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

您通常可以使用getResources()获取与您的应用程序关联的Resources实例。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.