欢迎来真孝善网,为您提供真孝善正能量书籍故事!

Android资源管理框架:Asset Manager基础概述与学习路线图

时间:11-03 名人轶事 提交错误

大家好,今天小编来为大家解答Android资源管理框架:Asset Manager基础概述与学习路线图这个问题,很多人还不知道,现在让我们一起来看看吧!

从上面的分析可以看出,无论是Web应用程序、PC客户端应用程序还是移动客户端应用程序,它们都是将代码与界面分离,而界面都是通过描述性文字来实现的。为了描述,这种描述性文本越来越倾向于使用XML格式。

Android应用程序作为移动客户端应用程序,也毫不奇怪地将代码逻辑和界面资源分离,但其资源管理方式与传统Web应用程序、PC客户端应用程序和iOS应用程序不同。这种比较有点复杂,因为Android 应用程序可能在不同大小和密度的设备上运行。接下来我们重点讨论Android应用程序资源的组织和管理。

我们先来看看Android应用程序资源的分类。 Android应用程序资源可以分为两大类,即assets和res:

1. assets。

asset类资源放在项目根目录的assets子目录下。一些原始文件保存在其中,可以以任何方式组织。这些文件最终都会被完整的打包在apk文件中。如果我们想在程序中访问这些文件,我们需要指定要访问的文件名。例如,假设assets目录下有一个名为filename的文件,则可以使用以下代码来访问它:

AssetManager am=getAssets();

InputStream is=assetset.open("文件名");

2. res。

res资源放在项目根目录的res子目录下。其中保存的大部分文件都会被编译并分配资源ID。这样我们就可以在程序中通过ID来访问res类的资源了。 res资源根据用途不同可以进一步分为以下9个子类型:

animator。

此类资源以XML文件形式保存在res/animator目录下,用于描述属性动画。属性动画通过改变对象的属性来实现动画效果。比如通过不断修改物体的坐标值来实现物体运动动画。比如通过不断修改物体的Alpha通道值来实现物体的渐变效果。

anim。

此类资源以XML 文件形式保存在res/anim 目录中,用于描述补间动画。补间动画与属性动画不同。它不是通过修改对象的属性来实现的,而是在对象的原始形状或位置的基础上实现变换。例如,对对象进行旋转变换,可以获得旋转动画,又例如,对对象进行缩放变换,获得缩放动画。从数学上讲,就是根据对象的原始形状或位置应用变换矩阵来实现动画效果。请注意,在动画执行过程中,对象的属性保持不变,我们看到的只是它的变形副本。

color。

此类资源以XML 文件形式保存在res/color 目录中,并使用选择器来描述对象的颜色状态。例如,我们可以定义一个选择器,指定一个对象在不同状态下显示不同的颜色。对象的状态可以分为7 种类型:按下、聚焦、选中、可检查、选中、启用和window_focused。

drawable。

此类资源以XML 或Bitmap 文件形式保存在res/drawable 目录中,用于描述可绘制对象。例如,我们可以在里面放置一些图片(.png、9.png、jpg、gif)作为程序界面视图的背景图片。请注意,此目录中保存的位图文件可能会在打包过程中进行优化。例如,不需要超过256 色的真彩色PNG 文件可能会转换为仅具有8 位调色板的PNG 面板,从而允许对图像进行无损压缩,以减少图像使用的内存资源。

layout。

此类资源以XML文件形式保存在res/layout目录下,用于描述应用程序界面布局。

menu。

此类资源以XML 文件形式保存在res/menu 目录中,用于描述应用程序菜单,例如选项菜单、上下文菜单和子菜单。

raw。

此类资源以任意格式的文件保存在res/raw目录中。和assets资源一样,它们都被打包在apk文件中,不做任何改变,但是它们会被分配资源ID,所以我们可以在程序中通过ID来访问它们。例如,假设res/raw目录下有一个名为filename的文件,在编译过程中,分配给它的资源ID为R.raw.filename,那么可以使用下面的代码来访问它:

资源res=getResources();

输入流=res .openRawResource(R.raw.filename);

values。

此类资源以XML文件的形式保存在res/values目录下,用于描述一些简单的值,如数组、颜色、大小、字符串和样式。一般来说,这六个不同的值存储在名为arrays.xml、colors.xml、dimens.xml、strings.xml 和styles.xml 的文件中。

xml。

此类资源以XML文件的形式存储在res/xml目录下,一般用于描述应用程序的配置信息。

需要注意的是,上述9种资源文件中,除了Bitmap文件的raw类型资源和drawable类型资源外,其他资源文件都是文本格式的XML文件。它们在打包过程中将被编译成二进制格式。 XML 文件。这些二进制格式的XML文件每个都有一个字符串资源池,用于保存文件中引用的每个字符串,包括XML元素标签、属性名称、属性值以及所有其他文本值使用的字符串。这样,文本格式XML文件中原来放置字符串的每个位置都被替换为索引到字符串资源池的整数值。这样做有两个好处:

A. 文件占用更小。

例如,假设在原始文本格式的XML文件中有四个地方使用了同一个字符串,那么在最终编译出来的二进制格式的XML文件中,字符串资源池只有一个字符串值,而这四个地方使用了相同的字符串。引用它只占用一个整数值。

B. 解析速度更快。

由于在二进制格式的XML文件中,所有的XML元素标签和属性值都是使用整数来描述的,因此,在解析过程中,不再需要进行字符串解析,这样可以提高解析速度。

另外需要注意的是,每个res资源编译打包后,都会被分配一个资源ID。这些资源ID最终将被定义为Java常量值并保存在R.java文件中。它与应用程序的其他源文件一起编译到程序中,这样我们就可以通过程序或资源文件中的这些ID常量来访问指定的资源。

接下来我们看一下应用资源的组织。应用程序资源的组织方式有18 个维度,如图1 所示:

图1 应用资源的组织结构.jpg 注意,图1中的表格来自官方文档。其详细描述请参考:http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources。这里需要说明的一点是,表中的18个维度是按照优先级从大到小的排列的。这种优先顺序可以帮助系统根据机器的本地配置在应用程序资源目录中找到最合适的资源。使用。

具体来说,Android资源管理框架按照图2所示的算法流程在应用程序资源目录中选择最合适的资源:

图2 应用资源匹配算法.png 注意,图2中的算法流程图来自官方文档。其详细说明请参考:http://developer.android.com/guide/topics/resources/providing-resources.html# BestMatch。我们也通过上述官方文档中的例子来说明上述应用资源匹配算法的执行过程。

假设应用程序的可绘制资源按以下方式组织:

可绘制/

可绘制-en/

可绘制-fr-rCA/

可绘制端口/

可绘制-en-notouch-12key/

可绘制端口ldpi/

drawable-port-notouch-12key/并且应用程序在配置如下的设置下运行:

区域设置=en-GB

屏幕方向=端口

屏幕像素密度=hdpi

触摸屏类型=notouch

初级文本输入法=12key 根据图2所示的算法,Android资源管理框架按照以下步骤选择drawable资源:

步骤1、排除与设备配置冲突的drawable目录,即drawable-fr-rCA目录,因为设备设置的语言是en-GB。可绘制/

可绘制-en/

可绘制端口/

可绘制-en-notouch-12key/

可绘制端口ldpi/

drawable-port-notouch-12key/Step 2. 从MMC 开始,选择一个资源组织维度来过渡Step 1 筛选后的剩余目录。

步骤3.检查步骤2中选择的维度是否有对应的资源目录。如果没有,则返回步骤2继续处理。如果是,则继续执行步骤4。在我们的示例中,必须重复步骤2,直到检查了语言维度。

步骤4. 消除不包含步骤2 中选择的资源维度的目录。在我们的示例中,我们要消除不包含语言en 的目录:

可绘制-en/

可绘制端口/

drawable-en-notouch-12key/Step 5、继续执行步骤2、步骤3、步骤4,直到找到最匹配的资源目录,即剩下最后一个目录。在我们的例子中,下一个要检查的维度是屏幕方向。由于设备的屏幕方向是port,所以所有不包含port资源维度的目录都会被淘汰:drawable-en-port/最后剩下的目录只有drawable-en-port,所以是最匹配的资源目录。此时所有的drawable类型资源都可以从该目录获取。

注意,当我们编译打包应用程序资源时,会生成一个resources.arsc文件。该文件记录了所有应用程序资源目录信息,包括每个资源名称、类型、值、ID以及配置的Dimension信息。我们可以把这个resources.arsc文件想象成一个资源索引表。该资源索引表可以根据资源ID和设备配置信息,快速在应用程序的资源目录中找到最匹配的资源。

最后,我们可以通过图3来总结一下应用资源的编译、打包和搜索过程:

图3 应用程序资源的编译、打包和搜索过程.jpg 从图3中我们可以看到:

A. 除了原样打包到APK中的assets和res/raw资源外,其他资源都会被编译或处理。

B. 除资产资源外,其他资源都会分配资源ID。

C、打包工具负责资源的编译和打包。编译完成后会生成resources.arsc文件和R.java。前者保存了一个资源索引表,后者定义了各个资源ID常量。

D.应用程序配置文件AndroidManifest.xml也会被编译成二进制XML文件,然后打包到APK中。

E.应用程序在运行时通过AssetManager访问资源,或者通过资源ID,或者通过文件名。

在以下系列文章中,我们重点关注三个关键场景:

1、应用资源的编译、打包过程;

2、应用资源的初始化过程;

3、应用资源的搜索过程。

通过这三个场景,我们可以基本了解Android系统的资源管理框架,敬请期待。不过,在阅读本系列文章之前,希望读者能够先了解一下Android应用资源的基础知识,因为本系列文章不会落入这些基础知识。详细信息可以参考以下官方文档:

A.http://developer.android.com/guide/topics/resources/index.html。

B.http://developer.android.com/guide/practices/screens_support.html。

OK,关于Android资源管理框架:Asset Manager基础概述与学习路线图和的内容到此结束了,希望对大家有所帮助。

用户评论

墨城烟柳

这个主题很有意思!我一直在想怎么更好的管理安卓app里的资源文件。

    有20位网友表示赞同!

灵魂摆渡人

终于找到了关于 Asset Manager 的资料,期待学习!

    有16位网友表示赞同!

发呆

作为安卓开发新手,这个学习计划很适合我入门。

    有5位网友表示赞同!

秘密

Asset Manager 听起来挺复杂,希望介绍能详细讲解。

    有7位网友表示赞同!

逃避

想了解一下 Asset Manager 能管理哪些类型的资源文件?

    有8位网友表示赞同!

麝香味

这篇文章能不能提到实战代码示例?这样更直观!

    有14位网友表示赞同!

夏日倾情

我之前用过 Android 标准资源加载的方式,不知道 Asset Manager 和它有什么区别。

    有15位网友表示赞同!

你身上有刺,别扎我

学习完这个框架应该能让我写出更高效的安卓程序吧?

    有6位网友表示赞同!

伪心

这个学习计划看起来还比较系统化,好消化!

    有16位网友表示赞同!

墨染殇雪

对安卓app打包方面不太了解,这个框架可能会给我一些启发。

    有18位网友表示赞同!

病态的妖孽

希望这篇文章能涵盖 Asset Manager 常见的应用场景和技巧。

    有12位网友表示赞同!

寒山远黛

我已经下载了 Android Studio,准备跟着学习计划动手实践!

    有8位网友表示赞同!

拽年很骚

以前遇到一些文件加载的问题,不知道Asset Manager 能不能解决这些问题?

    有10位网友表示赞同!

你tm的滚

这个框架似乎对大型项目的资源管理很有用呢!

    有16位网友表示赞同!

有阳光还感觉冷

分享一下你对 Asset Manager 的使用体验好吗?

    有20位网友表示赞同!

经典的对白

我感兴趣的是学习如何利用 Asset Manager 动态加载资源文件。

    有5位网友表示赞同!

煮酒

希望能找到更多关于 Asset Manager 的学习资料和教程。

    有17位网友表示赞同!

执拗旧人

这个框架的学习难度怎样呢?适合初学者吗?

    有14位网友表示赞同!

巷陌繁花丶

期待能够在实际开发中深入了解 Asset Manager 的优势!

    有9位网友表示赞同!

江山策

分享一下你用 Asset Manager 实现过的 coolest 项目代码片段吧?

    有14位网友表示赞同!

该用户已上天

我对 Asset Manager 非常感兴趣,我会认真学习这篇介绍!

    有18位网友表示赞同!

【Android资源管理框架:Asset Manager基础概述与学习路线图】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活