当我呼叫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> {
…
答案 0 :(得分:1)
AsyncTasks在后台使用常规线程来执行异步工作,是一个Threads规则,一旦完成,Thread就会死掉并且无法再次重用/启动,因此基于Java Core Behavior Threads无法重用做一个他们已经执行的功能,一旦“run”方法结束,线程就永远消失了,如果你需要相同的线程来重新加载数据,你需要提出自己的线程和机制来保持它直到下一个必须加载一组数据并将其保持在一个循环中,我不建议这样做,因为它的性能非常昂贵而且你需要处理所有资源的释放,如果你需要Loader来完成它的工作每次都是非常相同的线程,你做错事的可能性很高......
问候!