在线/离线图像管理策略

时间:2015-02-22 08:52:56

标签: android image web-services sqlite drawable

我正在开发一个应用程序,它将webservice获取数据和图像,并将其存储在设备中以供离线使用。同时,应用程序将一些数据存储在sqlite db中,一些图像作为默认数据。

以下是应用流程:

  • 当应用程序打开时,它将从Sqlite Db获取数据 存储在设备中的图像路径并显示它们。
  • 除此之外,如果有互联网连接,数据和图像来自 我会使用webservice并将其复制到 Sqlite DB(data) 以及稍后离线访问 device(images)

以下是问题:

  

做到这一点的最佳策略是什么(注意我也想要阻止   设备图库中显示的图像。他们将可以加入   仅来自应用程序)?

  • 我应该先在Assets Folder中存储默认图像并复制 他们到第一个oppening的外部目录。对于离线 使用来自webservice的图像,下载并保存到 同一个目录?
  • 我应该将本地图像存储在drawables和下载的图像中 设备的外部目录?
  • 我应该将SqliteDb中的所有图像存储为二进制数据(我不会 因为表现而喜欢)

还要考虑到我想为不同的设备尺寸存储多个图像。因此,在第一次打开时,我会检查设备drawable folder (xxhdpi, xhdpi, hdpi, mdpi)所采用的图像是这样的:

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

存储到SharedPreferences上的文件夹,所以当我从服务下载图片时,它会webservice的特定图片大小的特定文件夹和grap它们

  

在这种情况下,管理图像的最佳和最简单的策略是什么?

[注意:我不想使用google extension files因为数据和图像可以频繁使用]

1 个答案:

答案 0 :(得分:1)

  

我应该首先将默认图像存储在资产文件夹中,然后将它们复制到第一个操作中的外部目录中。对于从Web服务中离线使用图像,请下载并将它们保存到同一目录中?

没有。当您启动应用程序并使用缓存机制时从服务器获取它们,因此当Internet不可用时,它将从缓存文件夹中获取。对于这些,您可以使用picasso库来完成这些工作。

  

我应该将SqliteDb中的所有图像存储为二进制数据(由于性能我不喜欢)

不,您不应该在sqlite数据库中存储图像,因为这会使您的应用数据库大小变大。通常,如果我们想要做这些类型的东西,那么我们只存储图像路径而不是二进制文件。

  

在这种情况下,管理图像的最佳和最简单的策略是什么?

当您调用服务来获取位图时,检查设备密度然后将高度和宽度发送到服务器,然后期望它返回该大小,如fetchImage?image_width = xxx& image_height = yyy