2

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

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

哪个是进行数据库操作的最佳方法?

谢谢你。

4

2 回答 2

4

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

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

哪个是进行数据库操作的最佳方法?

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

如果您想告知潜在USER的有关正在运行的任务的一些进度,则可以使用 AsyncTask,值得一提的是,它是为理想情况下会持续几秒钟的任务指定的。

对于运行较长时间的任务,适合使用java.util.concurrentAPI包中提到的工具,如 ThreadPool、ThreadPoolExecutor、FutureTask 等。

我正在使用 AsyncTask 或本机线程进行数据库操作。通常他们持续最大。几秒钟。您始终可以使用TRANSACTIONS. 它们可以快速提高您的例如插入速度1并且还提供更安全的方式来处理您的数据库。它总是非常好,有效和有用的做法。


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

于 2013-04-03T09:00:30.177 回答
1

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

我不确定哪种方法是最好的,但 AFAIK 的标准方法是通过加载器(用于访问 ContentProvider 的CursorLoader或用于访问 SQLite 数据库的SQLiteCursorLoader )来完成。

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

于 2013-04-03T08:59:09.883 回答