Android SQLite 中的多线程怎么样?

2024-03-09

在我的应用程序中,我必须实现一些 UI 和同步服务。 它在后台运行并更新数据。同步服务并不是很简单,它使用了多线程。

所以,这是我的故事: 当我开始开发这个应用程序时,我对sqlite一无所知,所以我只是没有在Java中使用任何线程同步。结果:我收到许多异常,例如“SQLiteException:数据库已锁定:BEGIN EXCLUSIVE;”

然后我使用常规 Java synchronized () {} 块同步所有事务。一切都变得好多了。但我使用 Cursors 为我的列表实现 CursorAdapter。因此,有时我会得到相同的“SQLiteException:数据库已锁定:BEGIN EXCLUSIVE;”

我最终创建了一个小型线程安全 SQLite 实用程序来处理所有线程安全的内容。另外,我必须为我的 UI 使用类似 ArrayAdapter 的东西(从 Cursor 读取所有数据并在读取后关闭它,同时同步此块)。所以,它工作正常

但是,我不喜欢这种处理 UI 的方式,因为使用此解决方案 UI 变得非常慢 - 从游标读取一些数据相当快,但比使用 CursorAdapter 慢

那么,谁找到了这个问题的答案呢? 谢谢


于是,终于得出了解决方案。这里是。

我阅读了一些论坛、谷歌群组,发现 sqlite 数据库应该只打开一次。所以,我使用单例实现了这个。

另外,我实现了一些数据库代码来同步所有写操作(以防止许多线程同时执行写操作)。 而且我不关心打开光标、从中读取内容。

经过几天的测试,我没有收到用户的错误报告,所以我认为这可行

在我之前的工作中,我在应用程序中多次打开 sqlite 数据库,这就是问题所在。

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

Android SQLite 中的多线程怎么样? 的相关文章

  • OneSignal 推送通知 单击以打开活动

    我集成了一个用于推送通知的信号库 我想在应用程序未运行时通过单击推送通知来打开特定活动 我收到推送通知 但当我单击通知时 应用程序崩溃了 这是我的通知接收器代码 public class ExampleNotificationOpenedH
  • 仅允许使用 -Xjvm-default 选项从具有“@JvmDefault”成员的接口继承

    我在Android studio上更新了kotlin版本 ext kotlin version 1 6 10 不幸的是我收到构建错误 仅允许使用 Xjvm default 选项从具有 JvmDefault 成员的接口继承 我怎样才能解决这个
  • android 中 y + 高度必须 <= bitmap.height()

    我想从另一个创建位图 但每次尝试都会崩溃 这是错误消息 java lang IllegalArgumentException y 高度必须 这是我尝试创作的地方 public void saveBitmap Bitmap bitmapToS
  • 如何将库项目添加到 Android Studio?

    如何添加库项目 例如 Sherlock ABS 到安卓工作室 https en wikipedia org wiki Android Studio 不是针对旧的基于 Eclipse 的 ADT 捆绑包 而是针对新的 ADT安卓工作室 htt
  • 从当前位置出发的移动网络行车路线

    我正在构建一个网站的移动版本 试图通过一键式链接来启动 Google 地图 并提供从用户当前位置到企业的行车路线 我让它在 iPhone 上运行良好 但在 Android 上测试时 它会查看 Current 20Location 并尝试查找
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • Android:对于具有 LinearLayout 定义的成员的 ListView,上下文菜单不显示?

    我有一个 ListActivity 和 ListView 并且我已将一些数据绑定到它 数据显示得很好 而且我还为视图注册了一个上下文菜单 当我将列表项显示为简单的 TextView 时 它工作正常
  • XmlPullParser 异常 - 无法解决

    我有一个基本方法 ReadXML 从资产文件夹中读取 xml 文件 运行时不会引发任何异常 但在这个方法中 我调用了 doXML 方法 该方法尝试从 xml 文件中提取文本并将该文本设置到文本视图中 当 doXML 方法运行时 我不断收到以
  • __stack_chk_fail_local 和 -fno-stack-protector - 如何让它工作?

    Update 我刚刚发现问题出在我的项目 libxml2 中包含的预构建库上 它是在启用堆栈保护的情况下构建的 因此依赖于 stack chk fail local方法 我现在已经重建了该库 fno stack protector也是 一切
  • 有哪些学习线程编程的好资源? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着多核CPU在桌面上的兴起 多线程技能将成为程序员的宝贵资产 您能为想要学习线程编程的程序员推荐一些好的资源 书籍 教程 网站等 吗 看
  • JaCoCo 显示 0% 覆盖率,即使所有测试均已通过

    我在下面写了一些测试用例androidTest目录 我正在使用 androidx testInstrumentationRunner androidx test runner AndroidJUnitRunner 添加的依赖项 androi
  • 在 Android 模拟器中获取互联网连接

    我有一台带有wifi连接的台式电脑 我的IP地址是192 168 12 95 网关是192 168 10 10 但是我在android模拟器中没有获得互联网连接 也就是说我无法访问internate 我也尝试过 emulator avd w
  • Android - 带动画的可扩展 TextView

    我有一个TextView首先显示长文本的一小部分 用户可以按 查看更多 按钮来展开TextView并查看该文本的其余部分 进行测试 我可以通过简单地交换以下值来实现这一点TextView setMaxLines介于 4 之间 用于折叠 和
  • 将 Python 控制台集成到 GUI C++ 应用程序中

    I m going to add a python console widget into a C GUI below some other controls 许多类将暴露给 python 代码 包括一些对 GUI 的访问 也许我会考虑 P
  • 安卓浮动键盘

    是否可以通过编程方式更改键盘的位置 我正在开发一个图腾应用程序 如果键盘停靠在底部 则很难使用 我尝试创建一个扩展 InputMethodService 的自定义键盘 并且我能够更改按键的布局 但我无法更改键盘的视图位置 快捷键 https
  • 屏幕方向更改后应用程序崩溃

    我有以下问题 启动后 应用程序工作正常 即使在更改屏幕方向后也是如此 应用程序尚未准备好处理方向更改 例如替代布局等 因此仅显示旋转的默认布局就可以了 但是 当我通过按后退键离开应用程序 更改方向并在再次启动应用程序后立即崩溃 崩溃后 如果
  • 如何使 Edittext 大小保持不变?安卓

    我知道使 Edittext 左侧的文本 消失 以保持单行的属性 singleLine true 但我的问题是 当我在显示视图之前填充编辑文本时 在这种情况下 我的编辑文本都超出了屏幕 有任何想法吗 谢谢 这是填充空的 Edittext 时得
  • iPhone 相当于 Application.DoEvents();

    iPHone 我们使用 MonoTouch 但 Obj C 答案还可以 我的单例域对象需要一段时间才能获取所有数据 因此它在线程中内部运行部分获取数据 我需要通知 UI 域已完成 目前我正在这样做 有没有更好的办法 在 WinForms 中
  • 如何在ListView中标记视图?

    我有一个带有列表视图的应用程序 列表视图工作正常 当我希望列表以标记的某些行开始时 问题就开始了 如果我按下它 我可以标记一行 但是 似乎没有找到一种方法来在初始化时标记任何行 这是我的代码 listViewOfBluetooth getL
  • Volley 在第一次调用方法时返回 null

    我正在尝试使用 volley 从服务器检索数据 但是当我第一次调用此方法时 我收到服务器的响应 但该方法返回 null 如果我第二次调用它 我会得到最后的响应 public String retrieveDataFromServer Str

随机推荐

  • 尝试将新包发布到 NPM 时收到 404

    我刚刚创建了一个新包装 https github com supericium pli 我现在第一次尝试将其发布到 NPM 如下所示 ole MKI Sandbox pli npm publish access public npm ERR
  • Bash 'for' 循环语法?

    Bash 的语法是什么for loop 我努力了 for i 0 i lt 10 i do echo i done 我收到此错误 line 1 0 syntax error operand expected error token is 0
  • 在 npm install socket.io 期间,出现错误 127,未找到 node-waf 命令。怎么解决呢?

    我正在尝试使用node js 包管理器在centos 5 上安装socket io 在安装过程中我遇到了一个错误 make node waf 找不到命令 and 这很可能是 ws 包的问题 npm install socket io npm
  • 如何在 Laravel 集成测试中等待页面重新加载

    我们有一个操作来编辑重定向到同一页面的用户配置文件 这里 seePageIs 似乎没有等待新页面加载 以下测试失败 因为在响应中找不到新用户名 当我们在测试后手动加载个人资料页面时 它已正确更新 public function testCa
  • 此反应库代码周围的“{”“}”大括号有何意义? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在查看反应库代码 经过我发现一段特殊的代码我无法理解它的意义 有人可以帮忙吗 var validateFormat funct
  • jQuery datepicker 导致页面溢出

    我正在使用 jQuery ui 1 8 中的 datepicker 控件 from date是文本输入 我附上一个非常简单的日期选择器 from date datepicker 这会导致页面溢出 垂直滚动条 我试图避免这种情况 一旦我单击起
  • 无法解析类型“uint32_t”

    我正在 Eclipse 3 8 1 CDT 中开发 C 程序 我在 Debian 8 上使用 gcc 编译器 我还使用一个用 C 编写的名为 opendnp3 的开源库 它需要uint32 t来解析 因为它是多个方法调用和构造函数中的参数
  • 在执行过程中停止 Rhino 引擎

    Rhino 引擎是否有一个 api 可以停止执行 脚本fie在中间 例如 我有一个脚本文件 其中 有一个无限循环 怎样才能中途停止执行呢 当然 我可以停止启动Rhino引擎的jvm 执行脚本 但我不想因为这个原因终止整个 jvm 会话 因为
  • Javascript 排序以匹配 SQL Server 排序

    任何人都可以向我指出 JavaScript 中的排序算法 该算法的排序方式与 SQL Server 的排序方式相同 对于 nvarchar unicode 列 作为参考 我之前关于此行为的问题可以在这里找到 SQL Server 2008
  • 像 RStudio 这样的 Python 工作流程?

    我使用 Python 作为主要编程语言 有时会切换到 R 来执行快速数据分析任务 因为它具有用于统计编程目的的庞大库 尽管pandas http pandas pydata org 对于 python 来说太棒了 我猜大多数 R 用户都会选
  • 无法在 Android 模拟器中模拟位置数据

    我正在尝试测试我的应用程序 它使用模拟器使用地理定位 介绍了几种方法here https stackoverflow com questions 2279647 how to emulate gps location in the andr
  • 如何在数字数组中找到最佳匹配元素?

    我需要帮助解决一些看似简单但让我困惑的事情 尝试编写一些模糊匹配方法来处理根据需要计算的值与选择列表中实际可用的值之间的格式差异 价值 期权执行价格 始终是计算出的 Float 例如85 0 or Int 该数组包含字符串形式的数字 无论是
  • Jackson deearlization:根上有两个键。我如何打开其中一个并忽略另一个?

    使用杰克逊 2 x json 响应如下所示 flag true important id 123 email email protected cdn cgi l email protection flag 键不提供任何有用的信息 我想忽略
  • 为什么 C++ 编译器在创建机器代码之前将源代码翻译成汇编? [复制]

    这个问题在这里已经有答案了 我开始学习C 了解到编译器通过编译将源代码从程序变成机器代码 然而 我了解到 C 编译器实际上将源代码转换为汇编代码 作为将汇编代码转换为机器代码之前的中间步骤 这一步的目的是什么 他们为什么不直接将其翻译成机器
  • Reactjs/Apollo/AppSync 突变触发两次

    我遇到了 React Apollo AppSync 的问题 突变触发了两次 或多次 我有一个 React 应用程序 它有一个由通常的 UI 按钮 onClick 触发的更新突变
  • VS2012 发布网站 dll 而不是 cs 文件

    我有一个想要发布的简单 ASP NET 项目 我右键单击该项目并按 发布网站 但这会将我的所有 cs 文件生成到所选文件夹中 之前我一直在 bin 文件夹中获取 dll 文件而不是 cs 文件 我究竟做错了什么 问题可能出在发布设置中 请检
  • Javascript:检测 OS X“自然滚动”设置

    我面临一个问题 对于我正在做的项目 我正在检测滚轮位置 并根据该位置是否导航到下一张幻灯片 然而 一个问题是 一些 Mac 用户使用 自然滚动 反转页面上的滚动 这意味着 对于这些用户 我应该使用另一个方向的滚动作为触发器 我的问题是 有没
  • 在 VB.NET 中将 ArrayList 数据绑定到 ListBox?

    我在 VB NET 工作 我有一个名为 Invoices 的 ArrayList 其中填充了 Invoice 类的对象 我想将其数据绑定到 ListBox 以便随着 ArrayList 的内容更新并更改 ListBox 的更新 我已经在 I
  • 如何使用shell脚本访问mysql数据库?

    有没有办法使用 shell 脚本访问 MySQL 数据库 想要对多个表进行一些选择和插入 如果您能提供一些示例代码 那就太好了 因为我是脚本编写新手 这个链接似乎有你想要的信息 http www cyberciti biz faq usin
  • Android SQLite 中的多线程怎么样?

    在我的应用程序中 我必须实现一些 UI 和同步服务 它在后台运行并更新数据 同步服务并不是很简单 它使用了多线程 所以 这是我的故事 当我开始开发这个应用程序时 我对sqlite一无所知 所以我只是没有在Java中使用任何线程同步 结果 我