如何触发并忘记 Android 上的 SQLite 数据库插入?

How to fire and forget a SQLite database insert on Android?

情况是我有一个仅追加的日志数据库,并且定期向其中插入行。这工作快速而完美,但我很好奇 ...

由于这些记录并非绝对必要,因此将其实现为 即刻即忘 会很棒。但是,我也想保持它的轻量级,这让我觉得 AsyncTask 有点矫枉过正(用各种处理程序和同步生成一个新线程)。

您将如何实施?

更新:对于那些不熟悉"fire and forget"概念的人来说,它意味着尽可能快地执行任务而不阻塞并忽略结果。

好吧,任何磁盘 I/O 都需要在后台线程上完成,以免冻结您的 UI。所以,你有几个选择:

  • 使用AsyncTask,维护一个线程池

  • 使用自己的线程池

  • 使用单线程,完成后丢弃它们

  • 使用IntentService,如果您正在对这些记录进行批处理并将它们插入一个块中,这可能会很有用,因为这可能只需要足够长的时间就可以使服务变得有价值

无论您的线程模型如何,您都希望使用单例 SQLiteDatabase,通常由单例包装 SQLiteOpenHelper,以便为您处理线程间同步。

"lightweight" 的最佳选择不是更改数据库 I/O 本身,而是对记录进行批处理并将它们插入到单个事务中。这比在它们出现时插入它们要有效得多。然而,它增加了数据丢失的几率,因为当进程终止时,任何你没有坚持的东西都会poof