由于我不知道数据库操作需要多少时间,所以可以在线程中调用它们吗?
目前我有一个 ThreadPool 类,其中包含一个 ExecutorService 对象,该对象运行添加的作业。每个与 db 相关的方法都作为作业添加,因此 ThreadPool 将在新线程可用时运行它。
哪个是进行数据库操作的最佳方法?
谢谢你。
由于我不知道数据库操作需要多少时间,所以可以在线程中调用它们吗?
简短回答:是的。您应该在线程中执行数据库操作。您应该将应用程序的逻辑与应用程序的外观分开。
哪个是进行数据库操作的最佳方法?
通常使用线程是我认为您可以选择的最佳实践。使用的工具类型(PoolExecutor、FutureTask、AsyncTask、本机线程)取决于您的预期和假定的操作时间(如果操作持续时间超过 1-2 秒,则应使用线程)。
如果您想告知潜在USER
的有关正在运行的任务的一些进度,则可以使用 AsyncTask,值得一提的是,它是为理想情况下会持续几秒钟的任务指定的。
对于运行较长时间的任务,适合使用java.util.concurrentAPI
包中提到的工具,如 ThreadPool、ThreadPoolExecutor、FutureTask 等。
我正在使用 AsyncTask 或本机线程进行数据库操作。通常他们持续最大。几秒钟。您始终可以使用TRANSACTIONS
. 它们可以快速提高您的例如插入速度1并且还提供更安全的方式来处理您的数据库。它总是非常好,有效和有用的做法。
1我在测试与基本数据库操作相关的性能时做了一些测试,结果非常有趣。我插入了 100 000 条记录,差异很大。而插入事务大约需要。57,497 秒,没有事务的插入耗时超过 6 分钟。这太疯狂了。与删除和更新相同。
执行异步数据库操作完全没问题。
我不确定哪种方法是最好的,但 AFAIK 的标准方法是通过加载器(用于访问 ContentProvider 的CursorLoader或用于访问 SQLite 数据库的SQLiteCursorLoader )来完成。
您可以自由使用自己的机制,但要小心防止任何潜在的内存泄漏。