Android 中带有房间数据库的多线程

2024-04-11

最近我开始在我的 Android 应用程序中使用房间数据库。尝试从多个线程访问数据库时遇到一些问题。我在所有线程中使用相同的数据库实例。

  1. 据我所知,如果所有线程都有相同的数据库实例,那么 数据库访问是序列化的。我读过一个blog https://medium.com/@gwendal.roue/four-different-ways-to-handle-sqlite-concurrency-db3bcc74d00e连载中的那个 模式只有一个线程可以读写数据库。然而 根据sqlite https://www.sqlite.org/lockingv3.html文档,读取启用共享锁,因此多个 线程可以同时读取。所以当使用数据库的单个实例时, sqlite 的默认锁定标准允许多次读取和 是否执行了一次写操作?
  2. 根据 sqlite 文档,在写入数据库时​​,会启用第一个保留锁,并且如果任何其他写入操作尝试获取 保留锁然后写入尝试失败并且数据库返回 SQLITE_BUSY。 但是如果我尝试运行两个写操作 不同的线程我永远不会收到此错误。是不是意味着 写操作是排队的,并且保证我们永远不会 得到 SQLITE_BUSY 错误,因此写操作永远不会失败?
  3. 我正在一个线程(Thread1)中执行长插入操作(@Insert),并在另一个线程(Thread2)中读取数据库。如果 我在 Thread1 之后启动 Thread2,读取操作不会返回新的 在Thread1中插入数据,因此读取发生在插入之前。 发生这种情况是因为最初写入启用了保留锁并且 在此期间可以获取新的共享锁@sqlite 文档 https://www.sqlite.org/search?q=locking..

抱歉问了一个很长的问题。


None

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

Android 中带有房间数据库的多线程 的相关文章

  • Android从VideoView获取视频源路径

    我有 VideoView 实例 我需要知道它的视频源路径 是否可以 有谁能够帮助我 我的 WebChromeClient 类代码是 Override public void onShowCustomView final View view
  • 使用 shouldInterceptRequest 阻止数据加载

    虽然这个问题已经被问过好几次了 但与我的问题真正相关的唯一问题是这个 我可以使用 shouldInterceptRequest 来阻止 Android 中的特定调用吗 https stackoverflow com questions 16
  • Android 使用带有空格的键访问 Firebase

    这可能是一个愚蠢的问题 但我在谷歌的 firebase 网站上找不到任何示例 如果我在 firebase 数据库中有一个密钥 First Name 然后我打电话 FirstNameClass firstName dataSnapshot g
  • 如何在 Django 项目上访问 SQLite 的 db shell?

    我正在尝试更新变量上的列以允许 db shell 中为 null 这样我就不必删除我的表 我有通知数据 sqlite位于主文件夹中并且sqlite3 db位于 主应用程序 子文件夹中 这是为什么 我想访问哪一个 我知道它们是 2 个不同的文
  • 域不包含在应用程序域中

    我几天来就遇到了这个问题 以前它运行得很好 但现在显示了上述错误 我无法找出我缺少的内容 如何解决这个问题 image setting image 的一部分费率审查 public static String BASE DOMAIN http
  • 将长文本分成页面供viewpager使用

    我正在实施中的messureText方法这个问题 https stackoverflow com a 22199847 3930169在 viewpager 中渲染之前将长文本分成指定大小的页面 我正在使用增量字符数进行 while 循环以
  • 如何在android中播放来自URL的流媒体视频?

    我想在 android 中播放网站上的流媒体视频 例如 我想播放来自以下网址的流视频 http florotv com canal2 html http florotv com canal2 html 使用 URL Helper 我已经能够
  • Lombok 如何将代码生成到现有类中? [复制]

    这个问题在这里已经有答案了 我可以使用注释处理器从头开始生成类 但我无法像 lombok 那样修改类 我在 android studio 中搜索了 lombok 生成的类 但是我什么也没找到 然后我通过他们的网站检查了龙目岛概述 还在论坛中
  • 在 Android 上以编程方式输入 *#*#4636#*#* 等密码

    在许多 Android 设备上 您可以通过键入以下内容从 电话 应用程序进入秘密设置菜单 4636 http technology headlines com 2010 09 17 4636 android secret codes htt
  • 从视频文件中提取音频的问题(android)

    我需要将 mp4 或任何其他视频格式 转换为 mp3 或 wav 文件 我正在使用 C Xamarin Forms 我使用的任何库要么不适合我 要么与 android 不兼容 我尝试过使用 Xamarin Android FFMpeg 和
  • 如何在改造中在主体内传递 JSON 数组

    intent sale redirect urls return url http example com your redirect url html cancel url http example com your cancel url
  • 如何从内存中清除动态创建的视图?

    我试图从记忆中清除一些观点 情况是这样的 我有一个活动 我将其称为 A 另一个称为 B 现在 我在 Activity A 中按下一个按钮 该按钮调用 Activity B 动态创建大量视图 之后 我按后退按钮返回到活动 A 多次重复这两个步
  • 在 KtorClient 的 DefaultRequest 中声明 ContentType = Application.Json 后,我可以更改特定请求的 ContentType 标头吗

    我正在开发我的 android 项目 我正在创建一个请求函数来上传文件 该函数发出如下请求 httpClient put uri body MultiPartFormDataContent formData append file file
  • 无法启动由 ContextImpl.openFileOutput 处的 NullPointerException 引起的活动

    我发布了一个使用 Google 地图 Android 兼容性库的应用程序 https github com petedoyle android support v4 googlemaps https github com petedoyle
  • 画廊新媒体如何播放?

    我试图收到有关添加到手机图库的新图片或视频的通知 我需要获取新媒体的 URI 目的是让我可以自动备份它 因此 我需要一个在后台设置的寄存器来连续侦听或检查添加到图库的新媒体 并捕获 Uri 这过去是通过广播接收器完成的 例如
  • SQLite适合并发读吗?

    在没有锁定的情况下 SQLite 数据库的性能是否能达到每秒 50 次读取左右 我正在尝试确定它是否可以在不会经常 写入 的 PHP 网站上使用 它主要是从一小部分表中读取相同的数据 没问题 并发读 写实际上会被 SQLite 序列化 所以
  • RecyclerView:调整项目大小的动画

    我有一个RecyclerView 回收者视图的每个项目都可以展开或不展开 同一时间只能展开一项 本质上 我试图在棒棒糖拨号器中重新创建历史列表 我发现在 RecyclerView 上使用 LayoutTransition https sta
  • ImageView adjustViewBounds 不适用于相对布局

    我有一个ImageView并已设置其layout height为 100dp 其layout width为 wrap content 使用的绘图具有更大的实际尺寸 为 130dp 宽度 X 215dp 高度 当 的时候ImageView被放
  • 如何在 Android 键盘中包含建议

    我正在开发 Android 软键盘 我已经创建了键盘布局 但不知道如何包含在 EditText 中键入一些单词时出现的建议 例如 如果我写 在 中 已知 和 已知 将显示在建议中 所以我的问题是 1 如何在 Android 软键盘中包含建议
  • 当我关闭应用程序时,AsyncTask 是否会停止?

    我想将文件从手机上传到服务器 因为我正在使用 AsyncTask 如果文件很大 如果它们仍在上传并且用户关闭应用程序 上传会停止 即 AsyncTask 将结束还是继续直到完成 推荐使用Service http developer andr

随机推荐

  • 在 Foundation 中动态设置 Sass 变量

    如何在 Foundation 中动态设置 Sass 变量 根据他们的文档 http foundation zurb com docs components tables html 您可以借助一些 Sass 变量来自定义表格 settings
  • PHP MySQL 数据库奇怪字符

    我正在尝试输出存储在 MySQL 数据库中的产品信息 但它写出了一些奇怪的字符 例如内部带有问号的菱形 我认为这可能是编码 UTF8问题 但我已经指定了我想要的编码 这是正确的吗 我应该检查什么 如果只有来自数据库的数据包含奇怪的字符 请使
  • 如何使 TinyMCE 在 UpdatePanel 中工作?

    我正在尝试做许多人似乎能够做到的事情 但我无法实施任何解决方案 这TinyMCE http tinymce moxiecode com 控件在 asp net 表单中工作得很好 直到您用 UpdatePanel 将其括起来 然后在回发后中断
  • 在 SceneKit 游戏中为 SCNNode 制作 SCNConstraint (LookAt) 动画以使过渡逐渐进行

    一般来说 当你想让游戏中的角色面对镜头时 可以使用 SCNLookAtConstraint 这实际上也对我很有帮助 Below 我的对象是我试图根据约束定向的节点 Enemy 指的是场景中的某个节点 pointOfView 是场景的视角 当
  • eclipse 找不到 android.support.v4.widget.SwipeRefreshLayout

    即使点击添加支持库并选择版本19后 eclipse仍然找不到android support v4 widget SwipeRefreshLayout 有谁知道如何让它发挥作用 我在用
  • 无法在 AWS Opsworks 上使用 Chef 12 找到 Chef 社区食谱

    问题 在 AWS OpsWorks 上运行自定义说明书时setup failed状态针对实例显示 并且故障日志中显示以下内容 2016 03 26T22 53 48 00 00 INFO Started chef zero at chefz
  • numpy 中的索引(与 max/argmax 相关)

    假设我有一个 N 维 numpy 数组x和一个 N 1 维索引数组m 例如 m x argmax axis 1 我想构造 N 1 维数组y这样y i 1 i N 1 x i 1 i N 1 m i 1 i N 1 为了argmax上面的例子
  • 具有高质量代码的开源 Objective-C 项目?

    我认为学习新编程语言的最佳方法之一是深入研究源代码并了解经验丰富的程序员如何编写 我在 Stack Overflow 上发现了针对其他语言的此类问题 但没有针对 Objective C 的问题 我发现的最接近的是这个关于好看的 Cocoa
  • 如何在Delphi中调试由另一个.exe启动的.exe

    我想调试App2 exe 它是由App1 exe启动的 如果 App2 exe 是一个 dll 我可以指定一个主机应用程序 但这似乎不适用于 exe 我现在使用 附加到进程 但如果 App2 exe 在我执行此操作之前崩溃 则这是无用的 有
  • 为什么无符号变量没有被更频繁地使用? [复制]

    这个问题在这里已经有答案了 似乎无符号整数对于方法参数和永远不应该为负数的类成员很有用 但我没有看到很多人以这种方式编写代码 我自己尝试了一下 发现需要从 int 转换为 uint 有点烦人 无论如何 你对此有何想法 复制 为什么数组长度是
  • 如何在 C# 中执行 cmd,然后在同一窗口中执行后面的另一个命令?

    我想要完成的是一个基本上一键设置活动分区的程序 节省了使用 cmd 提示符等的时间和技巧 我已经研究了 System Management 名称空间 但无法弄清楚如何使用它 所以我求助于使用 CMD 我有一个用 C 编写的模块应用程序 基本
  • WebSocket 连接建立时出错:net::ERR_CONNECTION_CLOSED

    当我尝试建立一个wss与我的服务器的连接 与 wss mydomain 3000 的 WebSocket 连接失败 错误 连接建立 net ERR CONNECTION CLOSED 我目前有一个 apache2 虚拟主机配置设置来侦听端口
  • Hyperledger Composer:尚未为此连接指定业务网络

    我已经在本地安装了 hyperledger 作曲家 但在本地主机上它给出错误 错误 尝试 ping 时出错 错误 没有业务网络 为此连接指定 我也无法添加模型和脚本文件 这是终端中显示的错误 error Hyperledger Compos
  • 开放数据库你好世界

    我正在尝试了解 openDatabase 并且我想我正在将其插入到 TABLE1 但我无法验证 SELECT FROM TABLE1 是否正常工作
  • 在清单中指定 Android Market RAM

    有些人继续在具有 100MB RAM 的手机上下载并安装我们的高清游戏 并给我们一个差评 有没有办法将应用程序下载限制为仅具有大量内存的智能手机 或者限制为新型号 CPU 我的最终解决方案来自 Raghav Sood 的提示 经过一番研究后
  • 使用 C# WebClient 伪造表单提交

    我需要调用 Web 并从我的 asp net mvc 应用程序中的模型检索结果数据 在网络上访问时 表单如下所示
  • 需要开发数据库逻辑方面的帮助

    这是我的一个小型项目 航空公司预订系统 让我们称这个航空公司为 FlyMi 我有一个数据库 尚未决定使用哪个数据库 我的朋友想要使用 MongoDB 无论如何 这是我的要求 我有一张表 其中包含航班详细信息 航班号 时刻表等 我将使用这张表
  • 将 Null 值分配给数据表中的整数列

    我有一个数据表 其中一个列名称为 CustomerID 数据类型为整数 我想动态地将行添加到数据表中 为此 我创建了一个 DataRow 对象 例如 DataTable dt new DataTable DataRow DR dt NewR
  • Terraform 配置程序无法 winrm 到 Azure 上新建的 Windows VM

    我正在尝试使用 Terraform 在 Azure 上配置 Windows VM 并同时引导它 我能想到的方法是terraform provisioner 出于测试目的 我这样编写了配置程序 provisioner remote exec
  • Android 中带有房间数据库的多线程

    最近我开始在我的 Android 应用程序中使用房间数据库 尝试从多个线程访问数据库时遇到一些问题 我在所有线程中使用相同的数据库实例 据我所知 如果所有线程都有相同的数据库实例 那么 数据库访问是序列化的 我读过一个blog https