我已经查看了许多关于在Android中使用SQLite的示例/教程。假设您有一个使用SQLite的应用程序,其中包括ContentProvider、CursorLoader和自定义CursorAdapter。
现在我找到的所有主要示例都依赖于CursorLoader从ContentProvider中获取数据并将其传递给CursorAdapter,这是由于CursorLoader的特性使得它能够在异步-UI线程安全的方式下进行。然而,这些示例在主线程上进行插入/删除/更新操作(例如来自onClick、onResume、onPause等),通过ContentResolver进行调用。(例如:示例)。他们没有将这些调用封装在AsyncTask中或启动单独的线程或使用AsyncQueryHandler。
为什么会这样呢?这么多写得很好的博客/示例会犯这种明显的错误吗?还是说简单的单行插入/删除/更新调用如此之快,以至于可以从主/UI线程中安全地启动它们?这些快速调用的正确方式是什么呢?
现在我找到的所有主要示例都依赖于CursorLoader从ContentProvider中获取数据并将其传递给CursorAdapter,这是由于CursorLoader的特性使得它能够在异步-UI线程安全的方式下进行。然而,这些示例在主线程上进行插入/删除/更新操作(例如来自onClick、onResume、onPause等),通过ContentResolver进行调用。(例如:示例)。他们没有将这些调用封装在AsyncTask中或启动单独的线程或使用AsyncQueryHandler。
为什么会这样呢?这么多写得很好的博客/示例会犯这种明显的错误吗?还是说简单的单行插入/删除/更新调用如此之快,以至于可以从主/UI线程中安全地启动它们?这些快速调用的正确方式是什么呢?