首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以为DB操作设置优先级吗?

我可以为DB操作设置优先级吗?
EN

Stack Overflow用户
提问于 2014-10-22 14:57:25
回答 5查看 128关注 0票数 1

在我的android应用程序中,用户在“creates”页面上创建特定项,当他们点击“完成”时,我让他们继续使用该应用程序。

同时,在异步任务序列中,我执行以下DB操作:

  • 在数据库中插入项目
  • 在数据库中插入项目照片
  • 在db中的上载队列中插入项。
  • 如果是internet,则从db读取该项目并将其上载到服务器。
  • 如果成功,则在db中使用服务器id更新项。
  • 如果成功,使用db中的服务器in和urls更新项目的照片
  • 如果成功,则从db中删除上载队列中的项。

这需要2-10秒,当这些操作运行时,用户尝试打开“我的项目”屏幕或“我的配置文件”。

问题是,两个屏幕在加载之前都会从DB读取信息。

前面提到的操作是在后台运行的,但是DB无法访问“我的项目”以获取项目,也无法访问“我的配置文件”从数据库获取项目。

我能做什么?

最简单的解决方案是在运行这些操作时显示加载程序,并让用户等待,这可能需要一段时间,特别是当上传图像和网络是移动的时候。

编辑:我可以为DB操作设置优先级吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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,这可能有助于作为起点。

免责声明:我与作者或出版商无关。

票数 1
EN

Stack Overflow用户

发布于 2014-10-22 15:02:04

您能把BLOB写到您的数据库吗?我想这是长时间锁定DB的操作吗?是否值得将该映像存储在BLOB中,还是只需将其写入磁盘并在DB中保留对其的文件路径引用?

假设你可以让你在上传的时候至少允许你阅读(这看起来很奇怪,它完全锁定了那么长的时间):如果你让用户继续使用这个应用程序,而图像还没有上传,你就不能在DB中把这个项目标记为“不完全同步”(或者其他类似的措辞),当用户要去“我的项目”或者任何屏幕需要从该数据库中的任何项目时,用一个加载文件或者什么东西来显示这个项目没有完成。就像Instagram一样,当你上传照片的时候。

//编辑用于误读实际锁定的内容

票数 1
EN

Stack Overflow用户

发布于 2014-10-22 16:00:28

只需一次上传一个,并对db更新使用乐观锁定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26510550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档