2013-05-08 53 views
4

我有一個AsyncTaskLoader長時間運行的任務,當加載程序正在運行時,由於方向更改導致我的活動被破壞,因此不會調用onLoadFinished回調。AsyncTaskLoader:onLoadFinished在方向更改後不會調用

我能以某種方式'重新加載'到我的新活動/它的回調?

這是我(簡化)活動

public class DashboardActivity extends BaseActivity { 

StartupCallback startupCallback; 
    boolean loading = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.empty_viewpager); 
    startupCallback = new StartupCallback(); 

    if (!loading){ 
     getSupportLoaderManager().initLoader(GlobalApp.giveId(), null, 
       startupCallback); 
       loading = true; 
    } 
} 


private class StartupCallback implements 
     LoaderManager.LoaderCallbacks<Boolean> { 
    @Override 
    public void onLoadFinished(Loader<Boolean> loader, Boolean succ) { 

     Log.d("LOG", "onLoadFinished"); 
    } 

    @Override 
    public Loader<Boolean> onCreateLoader(int id, Bundle args) { 

     return new StartupLoader(getApplicationContext()); 
    } 

    @Override 
    public void onLoaderReset(Loader<Boolean> loader) { 

    } 
} 

} 

我不能只是開始另一個裝載有一個新的回調,因爲加載程序數據庫的東西和2名裝填手在同一個數據庫上工作會崩潰的應用程序。

+0

我認爲你的問題是重新開始活動。默認情況下,android在您更改方向時重新創建活動。爲了防止這添加有關android:configChanges在這裏閱讀:http://developer.android.com/guide/topics/manifest/activity-element.html – 2013-05-08 12:17:59

+0

謝謝,但正如你所說,這是默認行爲,我不想更改;停止活動從重新開始取向變化可能會在這裏工作,但在其他地方可能會遇到同樣的問題。 – FWeigl 2013-05-08 12:23:21

+0

你的新的StartupLoader的外觀如何?碼? – drdrej 2014-07-30 19:11:37

回答

9

在方向變化的活動被破壞並重新創建,但裝載機不是。

值得注意的是,調用initLoader()並不一定是啓動另一個加載程序。 如果加載了特定ID的加載程序存在,則LoaderManager會重用,並將您的回調函數重新附加到它。所以你可以刪除你的(!加載)條件,然後每 onCreate()回調調用中的initLoader。只要確保加載器的ID是相同的。

Loader guide

+0

這是有效的,我想知道爲什麼我不只是嘗試。謝謝! – FWeigl 2013-05-13 15:19:23

1

從文檔,只要ID是一樣的,你先通過它的一個,它應該返回當前加載程序,而不是一個新問題:android docs

-8

請參閱添加android:configChanges="orientation|screenSize"到我的活動奏效了我。

相關問題