2013-07-26 83 views
0

當我呼叫restartLoader時,它每次都會創建新線程。猜測原因是我的AsincTaskLoader是靜態的&片段也是靜態的,不是嗎?我應該怎麼做才能使用一個線程來重新加載我的數據?感謝名單當重新啓動加載程序時,它會每次創建新線程

public static class NewsBelarusSectionFragment extends Fragment implements LoaderManager.LoaderCallbacks<Object> { 
    … 
      @Override 
      public Loader<Object> onCreateLoader(int id, Bundle args) { 
        return new FeedsAsyncTaskLoader(getActivity()); 
      } 

      public static class FeedsAsyncTaskLoader extends AsyncTaskLoader<Object> { 
      … 

回答

1

AsyncTasks使用常規的線程在後臺異步做的工作是,一旦他們完成線程的規則,線程死亡,並且基於Java的核心行爲不能重複使用/重新啓動,因此,線程不能被重用來執行他們已經執行的功能,一旦「run」方法結束線程就會永遠消失,如果你需要相同的線程來重新加載數據,你需要提出自己的線程和機制來放置它直到下一組數據必須被加載並保持在一個循環中,我不會推薦這樣做,因爲它的性能非常昂貴,而且如果需要Loader,則必須照顧所有的資源釋放每次在同一個線程中執行它的工作,你做錯事的機會是h igh ...

Regards!

+0

謝謝,我的意思是如果我每次創建一個新的線程將我的數據加載到ListView這是好的,我很在乎線程?我在調試模式下運行了應用程序,顯示爲Running的threands,我想這意味着它們仍然在工作,而不是暫停。 –

相關問題