由于我不知道数据库操作需要多长时间,因此可以在线程中调用它们?
目前我有一个ThreadPool类,其中包含一个ExecutorService对象,用于运行添加的作业。每个与db相关的方法都被添加为一个作业,因此ThreadPool将在新线程可用时运行它。
哪种方法可以进行数据库操作?
谢谢。
答案 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数据库)。
您可以自由使用自己的机制,但要小心防止任何潜在的内存泄漏。