2016-04-27 141 views
3

我使用类扩展Loader我得到结果后如何阻止加载器?如何正确停止加载程序?

当我旋转手机,我得到一次结果:

@Override 
public void onLoadFinished(Loader<Data> loader, Data data) { 
     makeWorkWithData(); 
     //... finish this loader? (or delete result) 
} 
+0

你在哪里初始化的装载机? – David

+0

@大卫在onCreateView我的片段 – Artem

+0

好吧我做了什么,但它不是最好的解决办法,我认为是,在onLoadFinished我ASIGN结果到我的活动/片段中的对象......那么的onCreate/onCreateView我检查为resultData。如果它是空的,我启动我的加载程序,否则我将它保持原样。但是你要保存结果的onSaveInstanceState中和的onCreate保留它... – David

回答

5

使用此:

@Override 
public void onLoadFinished(Loader<Data> loader, Data data) { 
     makeWorkWithData(); 
     stopLoader(id); 
} 

void stopLoader(int id) { 
    getLoaderManager().destroyLoader(id); 
} 

而且需要使当请求再次拨打getLoaderManager().restartLoader()...

+0

不知怎的,我的装载机还是会被称为当这些数据的变化,我叫即使'getLoaderManager()destroyLoader(ID);'。我想知道为什么会这样。 – Mauker

1

我不干不满意机器人会装载机API作为轮换将导致加载程序重新开始他们在做的工作。这就是我使用和创建Android可维护任务库的原因。它是轻量级的,基于Android AsyncTask API,但具有自动旋转处理功能。您可能需要检查并使用它而不是加载器。

https://github.com/NeoTech-Software/Android-Retainable-Tasks

免责声明:我的Android可保留任务的作者。

+0

我不知道为什么你的装载机在你旋转设备时重新启动。我的加载程序不会重新启动,但是如果我的加载程序已经从网络获取数据 - 当我旋转设备时,他总是返回此数据。 – Artem

+0

有些人可以根据他们的状态(缓存,运行,完成)进行操作。请参阅:http://stackoverflow.com/a/30778505/1052697 –