在我的android应用程序中,用户在“creates”页面上创建特定项,当他们点击“完成”时,我让他们继续使用该应用程序。
同时,在异步任务序列中,我执行以下DB操作:
这需要2-10秒,当这些操作运行时,用户尝试打开“我的项目”屏幕或“我的配置文件”。
问题是,两个屏幕在加载之前都会从DB读取信息。
前面提到的操作是在后台运行的,但是DB无法访问“我的项目”以获取项目,也无法访问“我的配置文件”从数据库获取项目。
我能做什么?
最简单的解决方案是在运行这些操作时显示加载程序,并让用户等待,这可能需要一段时间,特别是当上传图像和网络是移动的时候。
编辑:我可以为DB操作设置优先级吗?
发布于 2014-10-31 12:29:42
我认为最干净的方法是改变你的架构。与使用多个AsyncTasks不同,您可以创建一个服务来对用户请求进行排队并对其进行管理。你甚至可以把服务分成两部分。一种是从用户输入和第二种服务来更新本地DB,以便与远程服务器同步(请考虑在这里使用SyncAdapter )。这样,装载机只需要加载少量数据。如果服务的操作完成,则可以使用通知机制更新加载程序。这就是它们的使用方式。
基本上,在向用户展示某些内容之前,您的操作应该尽可能快。考虑只在其他地方执行一次长时间运行的操作。
构建一个高效的Android架构需要一些开销,但是如果你想要构建一个一流的应用程序,就没有办法绕过它了。
以下是一些额外的提示:https://www.youtube.com/watch?v=xHXn3Kg2IQE Virgil Dobjanschi在2010年Google /O中讨论了"Android客户端应用程序“。"Enterprise”中关于健壮网络的架构一章是基于talk的。这本书还提供了一些示例代码:http://www.wrox.com/WileyCDA/WroxTitle/Enterprise-Android-Programming-Android-Database-Applications-for-the-Enterprise.productCd-1118183495,descCd-DOWNLOAD.html,这可能有助于作为起点。
免责声明:我与作者或出版商无关。
发布于 2014-10-22 15:02:04
您能把BLOB写到您的数据库吗?我想这是长时间锁定DB的操作吗?是否值得将该映像存储在BLOB中,还是只需将其写入磁盘并在DB中保留对其的文件路径引用?
假设你可以让你在上传的时候至少允许你阅读(这看起来很奇怪,它完全锁定了那么长的时间):如果你让用户继续使用这个应用程序,而图像还没有上传,你就不能在DB中把这个项目标记为“不完全同步”(或者其他类似的措辞),当用户要去“我的项目”或者任何屏幕需要从该数据库中的任何项目时,用一个加载文件或者什么东西来显示这个项目没有完成。就像Instagram一样,当你上传照片的时候。
//编辑用于误读实际锁定的内容
发布于 2014-10-22 16:00:28
只需一次上传一个,并对db更新使用乐观锁定。
https://stackoverflow.com/questions/26510550
复制相似问题