单用途装载机

时间:2013-08-26 04:12:02

标签: android android-loadermanager

在按钮的单击处理程序中,我正在从内容提供程序加载一些数据(使用getContentResolver().query(...)),然后在网络请求中发送该数据。由于使用这种方法在主线程上进行查询,我想将其移出主UI线程。

我想我可以使用LoaderManager,并在onLoadFinished()中触发网络请求,但问题是我不想再次调用onLoadFinished()(对于那个Loader id),因为例如,在屏幕方向期间,我不想再次触发网络请求。

那么,如何使用LoaderManager进行我只想发生一次的查询?

2 个答案:

答案 0 :(得分:0)

LoaderManager#initLoader()方法中调用Activity#onCreate()将创建新的Loader并强制重新加载,或重用现有的Loader并提供最近查询的数据任何存在。因此,只要您正确使用LoaderManager(即开发人员网站在文档中推荐的方式),您就不会有任何问题。

答案 1 :(得分:0)

onLoadFinished(),您可以拨打getLoaderManager().destroyLoader(loaderId)(或适用的getSupportLoaderManager())。这将阻止Loader自动重新加载。您可能还需要确保调用initLoader的位置不再执行(例如,通过在onSaveInstanceState中保存一个布尔变量)。