Android并发数据库操作——“数据库被锁定”

2023-12-08

我正在编写一个具有“在线模式”的应用程序,即根据需要下载、解析数据并将其插入到 SQLite 数据库中。所有这些都是由服务执行的。该应用程序由多个请求服务更新数据的活动组成(不同的数据取决于活动)。

当用户浏览活动时(无需等待服务完成),很容易获得 SQLiteExceptions(消息:数据库被锁定).

我想过使用同步的块,但这会迫使用户在服务完成更新时等待加载新活动(需要数据库访问才能加载)。所以这似乎是一个死胡同。

另一种选择可能是停止更新当在每个 Activity 的 onStop 方法中时。当然,更新会中断,但这并不是什么大问题。问题是我不知道如何处理它。

我的问题是,我可以/应该如何处理这个问题?


如果您的活动只是像我的情况一样读取而不写入数据库,这就是我所做的解决方法:

  • 创建一项服务(即 DatabaseService 0 并将其用作访问数据库的中心点(即打开数据库连接),以确保一次只有一个 dbhelper。
  • 所有需要访问数据库的活动和服务都必须与DatabaseService建立连接
  • 确保只有 DownloadService 的线程能够写入数据库并且应该使用事务
  • 之后,您可以使用getReadable数据库读取/使用连接停止下载服务等。

只需确保您只使用 1 个 dbhelper。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android并发数据库操作——“数据库被锁定” 的相关文章

  • Android 应用程序在后台运行时保存数据

    目前我正在开发 xmmp 客户端 当应用程序位于前台时 该客户端工作得很好 但由于事实上 当应用程序处于后台时 我在 Application 类中保存了大量数据 复杂的 ArrayList 字符串和布尔值作为公共静态 每个字段都被垃圾收集
  • Android SoundPool 堆限制

    我正在使用 SoundPool 加载多个声音剪辑并播放它们 据我所知 它的功能 100 正确 但在 load 调用期间 我的日志中充斥着以下内容 06 09 11 30 26 110 ERROR AudioCache 23363 Heap
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • Delphi XE7 Android 全屏(隐藏软键)

    如何在XE7中全屏显示 隐藏顶部 标题 和底部 软键 工具栏 在 XE6 中 我可以通过在应用程序部分写入来调整 AndroidManifest 以使我的应用程序全屏显示并且没有操作栏 android theme android style
  • MySQL JOIN 滥用?情况会变得有多糟糕?

    我读了很多关于关系数据库的文章 在每个 SELECT 上使用许多 JOIN 语句 但是 我一直想知道滥用这种方法从长远来看是否会出现任何性能问题 例如 假设我们有一个users桌子 我通常会添加 最常用 的数据 而不是进行任何额外的联接 例
  • 设置从 Facebook 登录获取用户电子邮件 ID 的权限

    我在用着Facebook 3 0 SDK对于安卓 我必须实施Facebook登录 我正在访问用户的基本信息 例如姓名 用户 ID 但我也想访问用户的电子邮件 我浏览了很多博客和论坛 但不知道该怎么做 我正在使用我自己的 android 按钮
  • 在 Google Analytics 中跟踪应用程序版本

    我正在使用谷歌分析模块 https marketplace appcelerator com apps 5081 2014113336 https marketplace appcelerator com apps 5081 2014113
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • Android 原理图内容提供程序库配置?

    Jake Wharton 在最近的一次演讲中提到了这个库 它看起来是避免大量样板文件的好方法 所以我尝试了一下 但没有任何成功 https github com SimonVT schematic https github com Simo
  • 如何在 sqlite 中将 2 列合并为新列

    我有一个包含 3 列的表 我必须将 2 列中的值按降序排列到一列中 A B C z 1 2 f 5 7 s 9 5 使用此示例 输出会将 B 列和 C 列中的值放入其中 如下所示 A B s 9 f 7 f 5 s 5 z 2 z 1 我当
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • Flutter 深度链接

    据Flutter官方介绍深层链接页面 https flutter dev docs development ui navigation deep linking 我们不需要任何插件或本机 Android iOS 代码来处理深层链接 但它并没
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 下载后从谷歌照片库检索图像

    我正在发起从图库中获取照片的意图 当我在图库中使用 Nexus 谷歌照片应用程序时 一切正常 但如果图像不在手机上 在 Google Photos 在线服务上 它会为我下载 选择图像后 我将图像发送到另一个活动进行裁剪 但在下载的情况下 发
  • Android:有没有办法以毫安为单位获取设备的电池容量?

    我想获取设备的电池容量来进行一些电池消耗计算 是否可以以某种方式获取它 例如 三星 Galaxy Note 2 的电池容量为 3100mAh 谢谢你的帮助 知道了 在 SDK 中无法直接找到任何内容 但可以使用反射来完成 这是工作代码 pu
  • Android 如何聚焦当前位置

    您好 我有一个 Android 应用程序 可以在谷歌地图上找到您的位置 但是当我启动该应用程序时 它从非洲开始 而不是在我当前的城市 国家 位置等 我已经在developer android com上检查了信息与位置问题有关 但问题仍然存在
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项

随机推荐

  • 使用 JavaScript 将光标放置在文本输入元素中的文本末尾

    在将焦点设置到元素后 通过 JavaScript 将光标放置在输入文本元素中的文本末尾的最佳方法 我认为是最简单的方法 是什么 有一个简单的方法可以让它工作most浏览器 this selectionStart this selection
  • iOS SDK:如何检查端口是否打开?

    我还没有找到任何关于如何检查端口是否打开的信息 我尝试使用 AsyncSocket 类来实现它 但它始终返回 TRUE 尽管我拒绝与服务器上该端口的所有连接 此外 我尝试使用isConnectedAsyncSocket 的方法 但总是返回
  • 如何防止 JavaScript HTML 阻塞

    如何防止 JavaScript 阻止其他 JavaScript 开始下载 我的网站上有以下内容 当我使用 YSlow Firefox 插件时 我可以从网络流量选项卡中看到google com google maps jsJavaScript
  • org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型转换为类型的转换器 [java.lang.String] - Redis

    我在用Spring Data Redis与Spring Boot 2 0例子 在此示例中 我尝试将客户数据 学生数据保存在一起 我不太确定这里的数据建模是如何发生的 但假设它与 Mongo DB 相同 纯非关系 有人可以帮忙解决以下错误吗
  • gem5 中的伪指令是什么?

    所以 我正在了解 gem5 中的一些模拟是如何实现的 更具体地说 我正在查看 PIMSim https github com vineodd PIMSim 我看到他们为 x86 架构实现了一些伪指令 我已经看到这些伪指令仅在完整系统模式下使
  • 如何在 C 函数中使用 std::vector

    C 函数期望缓冲区数组在运行时处于作用域内 例如 char values x y C 函数将填充缓冲区我想使用动态数组 这样我就不必对尺寸进行硬编码在这种情况下如何使用 std vector 需要明确的是 我正在使用 C C 函数包含在我无
  • VBScript 在创意者更新后消耗内存(Win 10,64 位)

    自最新的 Windows 更新 creators update winver给出 1703 构建 15063 483 我们在 VBScript 访问 COM 对象时遇到问题 它似乎只是消耗内存 直到内存超出 我们已经检查了我们的源代码并将其
  • 带有日期时间轴的 Seaborn 热图

    我创建一个热图 其中 x 轴为年份 y 轴为月份 热图中将显示 回报 这就是我所追求的 所以我有一些数据 我把它们变成 pct change 系列 import pandas datareader data as web import pa
  • 不再支持 Neo4j Filter 功能

    我想比较两个列表 以便找到第一个列表中不在第二个列表中的值并返回它们 预先感谢大家 代码返回 不再支持过滤器 有没有其他方法可以做到这一点 MATCH cu Customer name myCustomer pu PURCHASED gt
  • 将 mongodb 对象转换为 javascript 对象

    启动时我将配置文件传递给另一个 node js 模块 配置文件包含以下 json resolution activated true types of 23 当我在调用的 node js 模块中打印接收到的类型数组时 它看起来像 conso
  • 父子模块中的 Maven pom 继承和重写

    我很好奇如何决定子 pom 中的元素是否会覆盖父 pom 详细信息 或者只是与子 pom 中的父 pom 继承元素一起添加 我们举个例子来理解一下 例如 每个依赖项都由 Maven 坐标唯一标识 在子pom中 如果依赖项的maven坐标与父
  • 有没有办法让 Three.js 相机看起来偏离中心渲染?

    有没有办法设置 Three js 渲染器 使相机的观察点不在渲染图像的中心 澄清一下 在 0 0 0 处对一个只有一个 1x1x1m 立方体的场景进行成像 相机位于 0 0 10 观察点位于原点 与立方体的中心重合 如果我按原样渲染这个场景
  • 如何使用 php 从 HTML 表单收集数据?

    假设有一个 HTML 文件 其中有一个表单 其中包含一些数据 这些数据是使用 textarea 和 checkbox 从用户那里获取的输入 如何将此数据发送到 PHP 文件 您可以通过提交表单来发布此数据 然后在您可以使用的 php 文件上
  • 基于iOS 4并部署iOS 3的媒体播放器问题

    当在设备 3 1 2 上运行时 为什么它还传递 if NSClassFromString MPMoviePlayerViewController nil 做iOS4的代码就会崩溃 如何解决这个问题 if NSClassFromString
  • 使用 C# 将 FileStream 编码为 base64

    我知道如何对一个简单的字符串进行编码 解码base64 但是如果数据已经被写入文件流目的 假设我只能访问 FileStream 对象 而不能访问其中先前存储的原始数据 我将如何编码文件流转base64在将 FileStream 刷新到文件之
  • 具有重复数字的序列[重复]

    这个问题在这里已经有答案了 Data 我有一个data frame看起来像这样 df lt data frame id c 1 10 color c rep red 5 rep blue 5 df gt id color gt 1 1 re
  • 使用 django 查询返回活动时区中的日期时间

    我试图从表中检索最后 n 小时的行并在给定时区中打印它们的日期时间 给出打印日期时使用的时区 我试图使用 activate 使 django 返回具有正确时区的日期时间 但它返回 UTC 格式的日期 这是我当前的代码 min time da
  • Android 中如何实现通知功能?

    我正在 Android 上做一个帮助台应用程序 我想实现未读票证的通知 客户建议或投诉 在此应用程序的 iPhone 版本中 即使该应用程序未在应用程序图标本身上打开未读票据计数器 在 Android 中是否有可能 如果是这样 请帮助我像
  • QDate - 错误的年份

    我有以下情况 QDate fixDate QDate fromString QString 270912 ddMMyy 返回的年份是1912 我不明白为什么以及如何获得正确的年份 提前致谢 两位数年份始终解释为19xx 所以你可以通过YYY
  • Android并发数据库操作——“数据库被锁定”

    我正在编写一个具有 在线模式 的应用程序 即根据需要下载 解析数据并将其插入到 SQLite 数据库中 所有这些都是由服务执行的 该应用程序由多个请求服务更新数据的活动组成 不同的数据取决于活动 当用户浏览活动时 无需等待服务完成 很容易获