Android系统有一个与其他操作系统不相同之处,常见的操作系统如Windows操作系统,其主界面是系统核心的一部分不可以被替换,Android的主界面则是一个“应用程序”,名称为Launcher.apk,可以被其他软件厂商开发的界面程序替代。在使用Android系统过程中,发现加入Copybit硬件适配技术的Android主界面,在换用一款称之为LauncherPro的商业系统主界面应用程序时,可获得更为流畅的用户体验。
为了解释这个问题,本文对系统从启动到主界面解锁的整个过程中,Gralloc模块分配的显示内存数据进行了统计,发现了一些线索,统计结果见表1和表2。 表1 Android默认界面系统启动显存分配记录 次数 尺寸 格式 单次分配 (Byte) 总消耗内存(Byte) 1 800x480 RGB565 770048 77048 2 800x480 RGB565 770048 1540096 3 800x455 RGBA8888 1458176 2998272 4 800x25 RGB565 40960 3039232 5 800x455 4497408 1458176 4497408 6 480x76 RGBA8888 147456 4644864 7 480x76 RGBA8888 147456 4792320 8 480x76 RGBA8888 147456 4939776 9 800x480 RGB565 770048 5709824 10 800x480 RGB565 770048 6479872 11 800x480 RGB565 770048 7249920 12 800x480 RGB565 -770048 6479872 13 800x480 RGB565 770048 7249920 14 800x480 RGB565 -770048 6479872 15 800x480 RGBA8888 1536000 8015872 16 800x480 RGB565 -770048 7245824 17 800x480 RGB565 -770048 6475776 18 800x480 RGBA8888 1536000 8011776 19 800x480 RGBA8888 1536000 9547776 20 480x141 RGBA8888 274432 9822208 21 800x480 RGBA8888 -1536000 8286208 22 480x76 RGBA8888 -147456 8138752 23 800x25 RGB565 40960 8179712 24 480x141 RGBA8888 274432 8454144 25 480x76 RGBA8888 -147456 8306688 26 800x25 RGB565 40960 8347648 27 800x25 RGB565 40960 8388608 28 800x480 RGBA8888 1536000 9924608 29 800x480 RGBA8888 -1536000 8388608 30 800x455 RGBA8888 -1458176 6930432 31 800x455 RGBA8888 -1458176 5472256
表2 LauncherPro界面系统启动显存分配记录
次数 尺寸 格式 单次分配(Byte) 总消耗内存(Byte) 1 800x480 RGB565 770048 77048 2 800x480 RGB565 770048 1540096 3 800x455 RGBA8888 1458176 2998272 5 800x455 RGBA8888 1458176 4456448 4 800x25 RGB565 40960 4497408 6 800x455 RGBA8888 1458176 5955584 7 800x455 RGBA8888 -1458176 4497408 8 800x455 RGBA8888 1458176 5955584 9 480x76 RGBA8888 147456 6103040 10 480x76 RGBA8888 147456 6250496 11 800x455 RGBA8888 -1458176 4792320 12 800x480 RGB565 770048 5562368 13 800x480 RGB565 770048 6332416 14 800x480 RGB565 770048 7102464 15 800x480 RGB565 -770048 6332416 16 480x76 RGBA8888 147456 6479872 17 480x76 RGBA8888 -147456 6332416 18 800x480 RGB565 770048 7102464 19 800x480 RGB565 -770048 6332416 20 800x480 RGB565 -770048 5562368 21 800x480 RGB565 770048 6332416 22 800x480 RGB565 770048 7102464 23 480x141 RGBA8888 274432 7376896 24 800x480 RGB565 -770048 6606848 25 480x76 RGBA8888 -147456 6459392 26 800x25 RGB565 40960 6500352 27 480x141 RGBA8888 274432 6774784 28 800x25 RGB565 40960 6815744 29 480x76 RGBA8888 -147456 6668288 30 800x25 RGB565 -40960 6627328 31 800x455 RGBA8888 -1458176 5169152 32 800x455 RGBA8888 -1458176 3710976
图中横轴为内存分配或释放的次数,纵轴为内存使用量,其中深色数据为系统使用的总显存数量,浅色数据为每一次系统分配或释放的显存数量。图4-12为使用系统默认Launcher界面的内存分配情况,系统启动时最多占用约10MB显存,考虑到已分配内存之间的空隙,实际占用系统内存会稍大,系统完全启动后使用的显存约5.5MB。图4-13为使用LauncherPro界面的内存分配情况,系统启动时最多占用约7.5MB显存,系统完全启动后使用的显存约3.8MB,比使用Launcher节省1.7MB。 LauncherPro比Launcher节省的内存主要体现在分配图层的类型上。表4-8的第18和19次内存分配,分配了两块RGBA8888的图层,两块共占用显存3MB,供Launcher使用。表4-8的第21和22次内存分配,分配了两块RGB565的图层,两块共占用1.5MB显存,供LauncherPro使用。图层类型的不同,除了明显表现为节省显存外,还有一个巨大的好处,在进行图形混合操作时不需要进行颜色格式的转换。 图层混合计算过程可以利用硬件加速单元提升处理速度,这就是是Copybit硬件加速模块提升系统主界面性能的原因。但是LauncherPro软件通过避免使用RGBA8888图层,预先处理好数据,减少图层显示时的计算量,对于系统主界面这种需要频繁使用的应用,或许是一个更好的选择。 应用软件设计优化思路可归纳如下: 应用软件在频繁调用的场合尽量不要申请RGBA8888类型图层,避免占用系统资源和处理器的处理能力。 可以预先计算的显示资源应当尽量提前处理,避免在显示前一刻才进行计算。
|