我的Android应用程序包含一个带有SQLiteOpenHelper
类的SQLite数据库,以帮助管理它。在应用程序使用期间,用户可以在数据库上执行一些操作,例如添加/删除/更新等。
在某些时候,操作的大小将是已知的,如下所示:
SQLiteDatabase
执行单个insert
查询在应用程序的其他区域,操作可能很大,例如一次将10多个项目插入数据库。
问题:
当我说线程时,我的意思是使用不是主UI线程的线程。
编辑:我意识到小型操作不需要花费太多时间,我可以很好地完成主线程上的操作。我只是担心在主线程上执行它们并且想要澄清是不好的做法!
答案 0 :(得分:41)
一切的一般规则:如果它足够快,请在主线程上执行。如果没有,请使用工作线程。
除非你有一个非常庞大的数据库,否则单个操作几乎不会保证一个单独的线程。一般来说,数据库的设计可以很好地扩展,但是当然一个非常大的数据库(10,000多行?)会比一个小数据库慢一点。然而,30行是没有的。
如果你正在进行大量的操作,比如一堆查询或跨越多个表的复杂查询,我会开始线程化。
与所有内容一样 - 配置您的应用,如果它太慢,请进行优化。如果您的查询都不超过2毫秒,请不要编写一个很棒的同步超级duper多核就绪数据库处理程序。
答案 1 :(得分:6)
答案 2 :(得分:2)
绝对没有理由在这里使用线程。只需返回光标,从光标中提取信息并将其返回到主活动。
具体来说,一个线程理想情况下会重复,直到某些事情发生或超时。由于您正在使用的数据库是在电话上,因此访问它几乎是零时间。
您还可以做的另一件事是创建一个Utility类来协助您的数据库交互活动。这将是您的活动调用与数据库交互的内容。具体来说,控制流程是这样的:
活动 - >实用程序 - >数据库
它在活动和数据库之间,使它们彼此隔离,并使它更容易访问它需要的任何东西,因为它不必直接进入数据库本身。