Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 内容提供者线程_Android_Multithreading_Android Contentprovider - Fatal编程技术网

Android 内容提供者线程

Android 内容提供者线程,android,multithreading,android-contentprovider,Android,Multithreading,Android Contentprovider,只是好奇 getContentResolver().query(...) 我知道加载程序在后台线程上运行查询。这是否也适用于插入、更新和删除?我应该创建异步任务、线程等吗。。。打这种电话? 大型更新可能会阻止我的应用程序的主线程 getContentResolver().insert(...) 谢谢 来自 正在从提供程序检索数据 本节介绍如何使用从提供程序检索数据 以用户字典提供程序为例 为清楚起见,本节中的代码片段调用 “UI线程”上的ContentResolver.query()。但在实

只是好奇

getContentResolver().query(...)
我知道加载程序在后台线程上运行查询。这是否也适用于插入、更新和删除?我应该创建异步任务、线程等吗。。。打这种电话? 大型更新可能会阻止我的应用程序的主线程

getContentResolver().insert(...)
谢谢

来自

正在从提供程序检索数据

本节介绍如何使用从提供程序检索数据 以用户字典提供程序为例

为清楚起见,本节中的代码片段调用 “UI线程”上的ContentResolver.query()。但在实际代码中, 您应该在单独的线程上异步执行查询 要做到这一点,需要使用CursorLoader类,详细信息将对此进行描述 详细信息请参见《加载程序指南》。此外,代码行是代码段 仅;它们不显示完整的应用程序


加载程序仅适用于查询,即加载活动或片段中的数据,而不是插入/更新/删除

除了Loader(自Android3.0以来可用)之外,Android还提供了一个帮助器类(自API级别1以来),用于支持完整CRUD回调的异步CRUD类操作


AsyncQueryHandler与HandlerThread一起工作,用于异步操作,并将结果返回主线程。根据特定要求,使用AsyncTask或简单工作线程也是常用的做法。

当您说加载程序在后台线程上运行查询时,您需要了解它是实现在后台线程中执行查询的加载程序类的实例

这样做的结果是,您希望使用或扩展并实现抽象加载器类的子类,而不是使用AsyncTask或Java线程。原因是当您创建加载器时,它希望您返回类型为Loader的实例。Java线程或AsyncTask不能用于此目的。 加载器类的子类通过启动自己的线程来实现这一点。客户端类或创建加载器的类仅初始化加载器。实际的加载器实例可以执行您希望它执行的任何操作。这可以是任何操作-插入、更新、删除等。安卓提供的游标加载器实现在后台线程异步执行并返回结果集。Android不提供用于插入或更新数据的类似本机实现。您可以选择从AsyncTaskLoader(与CursorLoader继承的类相同)进行扩展

另外,请记住,加载程序用于优化数据库访问,因此,只有在完成任务后,才会将结果发布到主线程,而不是在此之前(有一种类似于黑客的解决方法,可以将更新发布到UI线程,但这打破了这种模式)。加载程序只关心完成其工作,不关心提供任何更新

如果您只想异步处理CordServices查询,您可能需要考虑使用Android提供的AcycQuyHuffer-Read类。