2013-07-26 107 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,我想这意味着它们仍然在工作,而不是暂停。 –

相关问题