2016-04-27 144 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 –