在按钮的单击处理程序中,我正在从内容提供程序加载一些数据(使用getContentResolver().query(...)
),然后在网络请求中发送该数据。由于使用这种方法在主线程上进行查询,我想将其移出主UI线程。
我想我可以使用LoaderManager,并在onLoadFinished()
中触发网络请求,但问题是我不想再次调用onLoadFinished()
(对于那个Loader id),因为例如,在屏幕方向期间,我不想再次触发网络请求。
那么,如何使用LoaderManager进行我只想发生一次的查询?
答案 0 :(得分:0)
在LoaderManager#initLoader()
方法中调用Activity#onCreate()
将创建新的Loader
并强制重新加载,或重用现有的Loader
并提供最近查询的数据任何存在。因此,只要您正确使用LoaderManager
(即开发人员网站在文档中推荐的方式),您就不会有任何问题。
答案 1 :(得分:0)
在onLoadFinished()
,您可以拨打getLoaderManager().destroyLoader(loaderId)
(或适用的getSupportLoaderManager()
)。这将阻止Loader自动重新加载。您可能还需要确保调用initLoader
的位置不再执行(例如,通过在onSaveInstanceState
中保存一个布尔变量)。