Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite交互最佳实践_Android_Sqlite - Fatal编程技术网

Android SQLite交互最佳实践

Android SQLite交互最佳实践,android,sqlite,Android,Sqlite,在UI线程上进行SQLite交互可以吗?? 将与SQLite的交互嵌入服务(AsyncTask或IntentService)中是一种最佳实践,还是我们应该为SQLite使用CursorLoader 1) 如果我使用IntentService返回一个用户定义对象的列表,那么我该怎么做呢。我们应该使用broadcastReceiver并将对象列表作为Parcelable对象的ArrayList放在意图中,然后将其发送回UI线程 2) 如果我必须使用游标加载器,那么我需要通过扩展AsyncTaskLo

在UI线程上进行
SQLite
交互可以吗??
将与SQLite的交互嵌入服务(
AsyncTask
IntentService
)中是一种最佳实践,还是我们应该为
SQLite
使用
CursorLoader

1) 如果我使用
IntentService
返回一个用户定义对象的列表,那么我该怎么做呢。我们应该使用
broadcastReceiver
并将对象列表作为
Parcelable
对象的
ArrayList
放在意图中,然后将其发送回UI线程

2) 如果我必须使用游标加载器,那么我需要通过扩展
AsyncTaskLoader
和重写
doInBackGround
方法为
SQLite
编写自定义加载器,在其中添加所需的代码


请建议我哪一种方法更好,因为我是android新手,如果有人有代码,也可以分享它

在UI线程上使用SQLite非常好。不需要添加所有服务和寓言内容,除非您打算滚动浏览大量数据

尽管您可以在UI线程上访问数据库并立即更新视图。 应该避免这种做法&在助手线程上进行数据库访问,即对工作线程使用异步任务/服务,即使操作花费的时间少于5秒。在android中,当线程完成任务后,您可以始终使用非UI-to-UI线程通信机制来更新视图。 请参阅此链接以了解有关非UI到UI线程通信机制的基础知识。 我通常使用在活动/服务上创建的异步任务访问数据库。
如果android后来决定不允许在UI线程上访问DB,那么如果DB访问已经在非UI线程上,那么您的代码就不需要返工。 android的历史记录表明,之前在UI线程上允许网络访问,但现在如果您将targetSDKversion设置为11,则应用程序将抛出NetworkOnMainThreadException&exit。
因此,最好在非UI线程上进行DB访问。

当使用带有
游标或适配器的
ListView
时,如果数据量“巨大”或只有几百行,实际上没有什么区别,我花了很多时间尝试使用intent服务,然后也尝试使用SQLiteCursorLoader,但发现很难实现。感谢您提供的信息,我有一个问题,哪一个更适合AsyncTask或IntentService。当您使用AsyncTask时,如果方向发生变化,它不会受到影响。我认为您无法将网络访问与访问内部数据库进行比较。网络访问从来就不是要在UI线程上运行的,只是从版本11开始,它显式地检查它没有运行。至于数据库访问——需要5秒钟的查询是相当罕见的。仅仅存储一个条目或更新一个字段通常只需要几毫秒,所以大多数情况下,它不值得涉及不同线程的开销。