让我们使用 Nexus One 进行一些计算:
屏幕分辨率为 480x800。因此所需的最小视频内存大小为:
400 * 800 * 4 bytes = 1536000 bytes
假设驱动程序可能(并且通常应该)使用多个缓冲区,我们还应该期望以下值:
1536000 * 2 bytes = 3072000 bytes
1536000 * 3 bytes = 4608000 bytes
etc...
如果值不是 1536000(或者通常是宽 x 高 x 4)的倍数,那就很奇怪了。
在对 Android 内部进行一些搜索后,我发现了这个文档 http://www.netmite.com/android/mydroid/development/pdk/docs/display_drivers.html :
...Android 对驱动程序提出了两个要求:可直接写入的可映射内存的线性地址空间...通过在 /dev/fb0 上调用 open 来访问驱动程序...
所以我尝试并采取尺寸/dev/graphics/fb0
文件(在我的设备上没有/dev/fb0
).
但直接的方法行不通:
File file = new File("/dev/graphics/fb0");
file.length(); // ==0, doesn't work, no read access
使用下一个技巧你可以得到实际大小fb0
:
>adb pull /dev/graphics/fb0
1659 KB/s (4608000 bytes in 2.712s)
视频内存约为 4mb (Nexus One)。让我们检查一下这是否是 Nexus 屏幕尺寸的倍数:
4608000/1536000 = 3
它看起来像是一个正确的值。我们也可以说驱动程序使用three屏幕缓冲区。
因此,作为结论,您可以使用 adb 检测视频内存大小,但由于文件访问限制,您无法在运行时从 Android 应用程序使用此方法。