2

我正在开发在某些时候显示图像的应用程序。我注意到在资源中,各种分辨率的应用程序图标版本很少。由于我将图像存储在数据库中,我想知道将图像的几个版本以不同的分辨率保存对我来说是否更好。原因很明显,应用程序速度,内存使用,唯一的缺点是由于数据更多,应用程序大小更大. 获取图像不是问题,我只是不知道何时知道图像的哪个版本以及如何确定它?或者也许只是保留一些更大的图像尺寸并让系统处理调整大小,因为它对设备没有太大压力?

另一件事是我将图像保存在数据库中,我想知道将这些图像保存在数据库中是否更有效的磁盘空间/cpu/内存使用/速度,或者仅将它们的名称保存在那里,将图像作为资源保存在 dpi 文件夹中对应于它们的大小?

4

2 回答 2

0

如果您没有太多图像,我强烈建议您使用资源文件夹中的自动资源加载。至于什么构成“太多图像” - 这真的取决于你。我个人认为,如果您可以在 APK 大小限制(50MB)内容纳所有图像,那么您应该这样做。

您还询问了哪些尺寸的图像应该针对哪些屏幕尺寸。为此,您应该仔细阅读Support Multiple Screen Sizes文档。具体来说,支持的屏幕尺寸范围部分将提供有关您可以定位的像素密度的指导。请记住,您不是目标屏幕尺寸 - 您的目标是屏幕密度。

正如您所指出的,您也可以只上传您拥有的最高分辨率图像,并让系统处理它。这是可能的,但会导致您的应用在低密度屏幕上的加载速度比它需要的慢一些。

我无法评论您的数据库方法,因为我对您的实现没有任何细节,但如果它是一个远程数据库,您必须从互联网上获取图像,那么我肯定会建议将您的图像放入资源文件。通过 Internet 获取这些资源的速度很慢,并且会浪费用户宝贵的带宽。

于 2013-01-26T16:00:58.327 回答
0

最简单的做法是制作一张高分辨率图像并按比例缩小。Android 的 ImageView 可以为您做到这一点。

另一方面,这将导致低端设备的性能问题。如果您的目标是该组,那么您应该拥有图像的预缩放版本并渲染适当的版本。以下代码可能会对您有所帮助:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
    case DisplayMetrics.DENSITY_LOW:
            break;
    case DisplayMetrics.DENSITY_MEDIUM:
            break;
    case DisplayMetrics.DENSITY_HIGH:
            break;
    case DisplayMetrics.DENSITY_XHIGH:
            break;
}

就个人而言,我不会将图像保存在数据库中,而是会为每个密度创建资源。

于 2013-01-31T16:04:10.977 回答