android - 我什么时候应该在另一个线程(不是主线程)上执行某些 SQLite 操作?

标签 android sqlite

我的 Android 应用程序包含一个带有 SQLiteOpenHelper 类的 SQLite 数据库来帮助管理它。在应用程序使用过程中,用户可能会对数据库进行一些操作,例如添加/删除/更新等。

有时会知道操作的大小,如下所示:

  1. 用户点击按钮保存项目
  2. SQLiteDatabase 执行单个 insert 查询
  3. 用户继续使用应用

在应用程序的其他区域,操作可能很大,比如一次将 10 多个项目全部插入数据库。

问题:

  • 我应该线程简单的操作,如插入/更新/删除/查看 1 个项目?
  • 将 1 个项目插入包含许多项目(例如 30 多个项目)的表中是否需要比插入没有项目的表中更长的时间?
  • 如果我不需要线程这些简单的操作,你建议我在什么时候开始线程?

当我说 线程 时,我的意思是使用不是主 UI 线程的线程。

编辑:我意识到小型操作不需要太多时间,我可以很好地在主线程上执行它们。我只是担心在主线程上执行它们是不好的做法,并希望得到澄清!

最佳答案

所有事情的一般规则:如果速度足够快,请在主线程上执行。如果没有,请使用工作线程。

除非你有一个大得离谱的数据库,否则单个操作几乎不需要单独的线程。一般来说,数据库设计得很好,但是当然一个非常大的数据库(超过 10,000 行?)会比一个小的数据库慢一些。然而,30 行不算什么。

如果你有很多操作正在进行,比如一堆查询,或者跨越多个表的复杂查询,我会开始线程化。

与所有内容一样 - 分析您的应用,如果速度太慢,请进行优化。如果您的查询时间都不超过 2 毫秒,请不要编写出色的同步 super 重复多核就绪数据库处理程序。

关于android - 我什么时候应该在另一个线程(不是主线程)上执行某些 SQLite 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047378/

相关文章:

sqlite - 如何在 flutter moor 中为双值创建列

android - 在mac中设置ANDROID_HOME环境变量

iphone - SQLite for iOS 中的多个查询

android - 为什么一些 SQLite 方法期望参数为 Object[] 而其他方法需要 String[]?

android - 网站在 Android 网络浏览器中无法正确缩放

android - Android Eclipse 项目中是否允许用户定义的目录名称

java - 无法使用给定的查询删除数据

android - Flutter initState() 返回 _debugLifecycleState 错误

android - 创建自定义链接类型以打开应用程序

android - 使用 Play App Signing 时如何获取 Android 应用程序的 SHA-1 和 SHA-256 指纹?