可以在Thread中进行任何数据库操作吗?

时间:2013-04-03 08:38:23

标签: android sqlite

由于我不知道数据库操作需要多长时间,因此可以在线程中调用它们?

目前我有一个ThreadPool类,其中包含一个ExecutorService对象,用于运行添加的作业。每个与db相关的方法都被添加为一个作业,因此ThreadPool将在新线程可用时运行它。

哪种方法可以进行数据库操作?

谢谢。

2 个答案:

答案 0 :(得分:4)

  

由于我不知道数据库操作将花费多少时间,所以它将会是   好的,可以在线程中调用它们吗?

简短的回答:是的。您应该在Threads中执行db操作。您应该将应用程序的逻辑与应用程序的外观分开。

  

哪种方法可以进行数据库操作?

一般来说,使用Threads是我认为你可以选择的最佳实践。使用的工具(PoolExecutor,FutureTask,AsyncTask,本机线程)取决于您的预期和假定的操作时间(如果操作持续时间超过1-2秒,则应使用线程)。

AsyncTask适合使用,如果你想告知潜在的USER关于运行任务的一些进展,值得一提的是指定的任务将持续理想的几秒钟。

对于运行时间较长的任务,最好使用 java.util.concurrent 包中提到的API工具,如ThreadPool,ThreadPoolExecutor,FutureTask等。

我正在使用AsyncTask或本机线程进行数据库操作。通常他们最后一次。几秒钟。始终可以使用TRANSACTIONS提高与插入,删除和更新相关的效果。他们可以快速提高您的插入速度 1 ,并提供更安全的方式来处理您的数据库。始终是非常好,有效和有用的练习。


1 当我测试与基本数据库操作相关的性能时,我做了一些测试,结果非常有趣。我进行了10万条记录的插入,差异很大。而交易插入大约需要。 57,497秒,没有交易的插入需要花费超过6分钟。这太疯狂了。与删除和更新相同。

答案 1 :(得分:1)

执行异步数据库操作完全没问题。

我不确定哪种方法最好,但AFAIK的标准方法是通过Loaders(CursorLoader访问ContentProvider或SQLiteCursorLoader访问SQLite数据库)。

您可以自由使用自己的机制,但要小心防止任何潜在的内存泄漏。