当前位置:  开发笔记 > 编程语言 > 正文

正确实现异步Android SQLite数据库

如何解决《正确实现异步AndroidSQLite数据库》经验,为你挑选了1个好方法。

我已经用Google搜索并找到了多种异步访问本地SQLite数据库的方法:

的AsyncTask

CursorLoader(我已经将它用于查询以检索我的联系人信息,但我不确定这将如何转换为带有多个查询的SQLiteOpenHelper子类)

ContentProvider - 不确定它是否过度,只需要从应用程序中获取数据库

什么是最佳做法?我目前有一个SQLiteOpenHelper子类,其中包含基本表创建/升级/等.逻辑.



1> Karakuri..:

CursorLoader仅支持查询.如果要在UI中显示数据,您可能仍希望使用它并利用Loader框架.CursorLoader旨在与a一起使用ContentProvider,但您可以复制源代码并修改它以获取SQLiteDatabase而不是Context并查询数据库而不是方法ContentResolver内部loadInBackground().

对于写入操作,您有几个选项需要考虑(这些选项不是互斥的,根据具体情况,您最终可能会使用多个选项):

的AsyncTask

处理器

IntentService

AsyncQueryHandler

Java线程/执行程序框架

我通常AsyncTask用于可能具有轻微UI影响的一次性操作(例如,在屏幕上显示和隐藏一些指示符).请注意,AsyncTasks在单个工作线程上串行运行,除非您提供自己的Executor execute().

IntentService它是有用的,它排队所有的启动命令并在工作线程上串行执行它们,并在完成所有启动命令时自动关闭.它是一个服务,因此它与任何活动/ UI组件分开运行,但这也意味着有一些开销,因为它是一个需要由系统创建和启动的应用程序组件.我喜欢它们用于批量操作或将来某个时间安排的操作.

AsyncQueryHandler不仅仅是查询(尽管如何命名),但CursorLoader它希望你正在与一个人进行通信ContentProvider.您可以使用单个处理不同类型的操作.重要的是要注意,ContentProvider它本身不提供异步处理,你必须从后台线程调用它,这是什么AsyncQueryHandler.

最后,好的旧Java线程和执行器框架工作得很好,尽管您可能希望有一些应用程序组件供它们运行(可能是一个服务,但如果是这样的话,你可能只是去上面的IntentService) ).

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有