适用于Android中小型应用程序的适当的线程外数据库接口

TBridges42

我知道这里有很多与此主题相关的主题,但是我还没有真正回答我的问题,其中很多主题来自2010年,当时似乎并不太重视保留任务离开UI线程。

我需要进行足够密集的数据库查询,以致导致UI响应明显延迟(在我的S5上,因此在很多手机上情况会更糟)。我想将查询推送到另一个线程。我一直在使用ASyncTask进行此操作,但我正在阅读ASyncTask的问题以及诸如屏幕旋转,中断应用程序和内存泄漏之类的问题。我到处都看到的建议是使用CursorLoader,但为此构造函数需要一个Uri,因为它是为内容提供者设计的。内容提供者不仅对我的应用似乎有点矫,过正,而且Google的内容提供者教程页面特别指出:“如果使用完全在您自己的应用程序中,则不需要提供者来使用SQLite数据库。”

所以我的问题是,ASyncTask和内容提供者之间有什么关系?内部数据库是否有CursorLoader的实现?也许是ASyncTask的更强大的实现?

常用软件

我一直在使用ASyncTask进行此操作,但我正在阅读ASyncTask的问题以及诸如屏幕旋转,中断应用程序和内存泄漏之类的问题。

AsyncTask正确使用有点棘手。由一个保留的片段(例如,模型片段)管理一个会有所帮助。

内部数据库是否有CursorLoader的实现?

没有一个很好的工作。我说这是写了一个(并且自弃用以来)。Loader接口的设计是围绕一个单一的用例的抽象:ContentProvider

也许是ASyncTask的更强大的实现?

并不是AsyncTask需要“更强大”,而是您必须意识到它的各种问题。例如,自负的CursorLoader使用AsyncTask

归根结底,所有AsyncTask工作都是使用线程池中的后台线程,并将通信调解回主应用程序线程以获取工作结果。有多种方法可以达到相同的目的。目前,我很喜欢将greenrobot的EventBus(或者,如果可能有很多同时发生的事件,则从线程池中使用)与普通线程一起使用除此之外,您还可以:

  • 将普通线程与 Handler
  • 使用普通的螺纹与post()View
  • 使用普通的螺纹与runOnUiThread()Activity

所有这些都假定工作相当短暂且可以随意处理,就像您的情况一样。对于较长和/或较少使用的工作,如果工作可能需要数十秒或更长时间,请使用IntentService,可能是myWakefulIntentService

但是,所有这些仍然存在问题,在某些情况下,它们AsyncTask本身也存在相同的问题(例如,正确解决配置更改)。没有“银弹”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

适用于Android应用程序的数据库

适用于Android移动应用程序的数据库

适用于 Android 移动应用程序和 Windows pc 应用程序的在线数据库

适用于通用Windows应用程序的本地数据库

适用于iOS应用程序的Parse.com支持的数据库

适用于应用程序的SQL数据库编程的一般问题

一个适用于许多数据库的laravel应用程序

更改数据库后,Rails应用程序不适用于乘客

熊猫循环,适用于小型数据帧,适用于大型数据库

无法使用实体框架连接到 C# asp mvc 应用程序中的 Sql 数据库,但相同的代码适用于 Winform 应用程序

sql适用于C#中的这种小型数据库基础项目吗?

适用于小型应用程序的Perl Dancer或Node.js

Android应用程序中的Firebase云消息传递仅适用于通知而不适用于数据消息

适用于数据库的实时python应用

寻找适用于大多数读取应用程序的数据库解决方案,查询3亿条记录

适用于Android SDK的SQLite数据库

哪个适用于Android数据库?

适用于Android应用程序的后端

适用于Android的Qt:更改应用程序图标

适用于Android应用程序的RESTful Web服务

调试适用于Android平台的离子应用程序

适用于Android应用程序的Java多维数组

适用于桌面/ios/android 的 Angular 应用程序

适用于Android应用程序的Meteor Backend的OpeningHandshakeException

适用于应用程序的Android测试代码?

适用于本机Android应用程序的Cordova插件

HTTPS请求不适用于android应用程序

使用适用于Android应用程序的Google Map

适用于 Android 应用程序的 SQL 或 Firebase