让我解释一下我的应用程序应该如何工作:
应用程序将在其资源文件夹中附带一个sqlite数据库,该数据库稍后将被复制到数据库文件夹中,并且其中包含一些内容(类别,子类别,产品和新闻),它们都具有图像。然后下载后用户可以通过互联网更新内容,应用程序将新内容存储在数据库中,以便应用程序可以脱机执行。
所以我的问题是,一段时间后这个内容的大小会增加,是否会导致我的应用程序崩溃?假设我发布了1 MB数据库的应用程序,经过2年的工作,数据库大小增加了大约120 MB。是否会使应用程序崩溃?
另一个问题是,目前我将图像存储在数据库中,然后从那里加载“em”。这是一个好方法吗?因为我不希望用户能够清除缓存或删除图像,因为稍后更新内容时必须再次下载这些已删除的图像,这将消耗流量imo。
请记住,应用应该可以离线加载内容
答案 0 :(得分:2)
不,应用程序不会因为拥有大型数据库而崩溃。
Cursor
的部分要点是它可以让您查看大量数据,而无需同时将其全部加载到内存中。
如果您遵循最佳做法,我认为没有问题 - 您正在使用数据库。忘了它在Android上的一秒 - 你应该尽可能地优化你的表结构,索引等。
另外,大型数据库与否,不要在主线程上对它进行任何查询。如果您需要在用户界面中显示查询结果,请使用Loader
API。
最后,可能最重要的是,重新思考为什么你甚至需要这么大的数据库。用户在离线时需要访问所有数据真的很常见吗?或者,您可能更有意义的是仅存储上周或月份的数据等,并告诉他们需要联机才能访问旧数据。
关于你的第二个问题 - 请将来将其分成一个单独的问题。但是,不,在sqlite数据库中存储二进制blob(在这种情况下为图像)并不是一种好方法。此外,如果他们清除应用程序上的数据,一切都已消失,因此使用数据库避免这种情况没有任何好处。我建议将图像存储在设备外部存储器中以应用程序命名的文件夹中,这可能会将图像URI /名称存储在数据库中。
答案 1 :(得分:-2)
数据库的任何问题都会导致您在应用中处理SQLiteException
以防止异常终止。
话虽如此,120 MB的数据库似乎太多了,您确定您的用户会想要所有这些吗?