2013-08-26 57 views
0

在按鈕的點擊處理程序中,我從內容提供者(使用getContentResolver().query(...))加載一些數據,然後在網絡請求中發送該數據。由於使用這種方法在主線程上發生查詢,我想將其從主UI線程中移除。Single Use Loader

我想我可以使用LoaderManager,並在onLoadFinished()中關閉網絡請求,但問題是我不希望onLoadFinished()再次被調用(對於Loader id),因爲我不想打火例如,在屏幕方向期間再次發出網絡請求。

那麼,如何使用LoaderManager進行查詢,我只想發生一次?

回答

0

Activity#onCreate()方法將創建一個新Loader並強制進行新的負載,或重新使用現有Loader,並提供最近查詢的數據,如果存在的話主叫LoaderManager#initLoader()。因此,只要您正確使用LoaderManager(即開發人員網站在文檔中建議的方式),就不會有任何問題。

+0

問題是我只需要一次查詢的結果,但使用LoaderManager,我多次獲取結果(在屏幕旋轉或活動重新創建等)。 –

0

在您的onLoadFinished()中,您可以撥打getLoaderManager().destroyLoader(loaderId)(或getSupportLoaderManager()(如適用))。這將阻止Loader自動重新加載。您可能還需要確保您撥打initLoader的地方不會再次執行(例如,通過在onSaveInstanceState中保存布爾變量)。