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

我的Android应用程序包括一个SQLite数据库和一个SQLiteOpenHelper类来帮助pipe理它。 在应用程序使用过程中,用户可以对数据库执行一些操作,如添加/删除/更新等。

在某些时候,操作的大小将是已知的,如下所示:

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

在应用程序的其他领域,操作可能很大,例如一次插入10多个项目到数据库中。

问题:

  • 我应该线程插入/更新/删除/查看1项简单的操作?
  • 将一个项目插入一个包含许多项目(比如30+)的表格比插入一个没有项目的表格需要更长的时间?
  • 如果我不需要线程这样简单的操作,那么你在什么时候开始线程化呢?

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

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

Solutions Collecting From Web of "什么时候应该在另一个线程(而不是主线程)上执行某些SQLite操作?"

一切的一般规则:如果速度够快,在主线程上执行。 如果不是,请使用工作线程。

除非你有一个可笑的巨大的数据库,否则一个单独的操作几乎从不保证一个单独的线程。 一般来说,数据库的devise可以很好地扩展,但是当然,一个非常大的数据库(一万多行)会比一个小的数据库慢一点。 然而,30行却什么也没有。

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

与所有内容一样 – 分析您的应用,如果速度太慢,则优化。 如果你的查询都不超过2ms,不要编写一个非常棒的同步超级多核心数据库处理程序。

在优化之前,一定要测量!

确保数据库操作确实会影响用户体验,而不是开始寻找解决scheme。

如果数据库的东西变慢,那么使用AsyncTask ,它被devise为在后台执行任务,然后在EDT上更新GUI。

没有理由在这里使用线程。 只需返回光标,从光标提取信息并将其返回到主要活动。

具体而言,一个线程是一个理想的东西,要重复,直到发生或超时。 由于您使用的数据库正在使用,因此访问它几乎不需要任何时间。

另外你可以做的另一件事是创build一个Utility类来协助你的活动到数据库的交互。 这将是你的活动调用与数据库交互的东西。 具体来说,控制stream程将是这样的:

活动 – >实用工具 – >数据库

它在活动和数据库之间保持相互隔离,使访问更容易,因为它不必直接访问数据库本身。