restartLoader(int id, Bundle args, LoaderCallbacks<D> callback)是否创建一个全新的加载程序对象?还是只是通过重置其内部状态来重用旧的?

谢谢你的帮助。

最佳答案

如果您每次致电都传递相同的ID

 restartLoader(int id, Bundle args, LoaderCallbacks<D> callback)


它将重用相同的加载器对象。但是,如果您传递新的ID,它将创建一个新的Loader对象。从文档检查this quote from the documentation起的工作方式:


  在此管理器中启动新的或重新启动现有的Loader,向其注册回调,并且(如果活动/片段当前已启动)开始加载它。如果先前启动了具有相同ID的加载程序,则在新的加载程序完成工作后,它将自动销毁。回调将在销毁旧加载程序之前传递。


但您不必对此进行深入研究,因为ID与本文档指南check the Loader Summary Here中的内容一样重要:


  要开始从加载器加载数据,请调用initLoader()或restartLoader()。系统会自动确定是否存在具有相同整数ID的加载程序,并将创建新的加载程序或重用现有的加载程序。


简而言之,如果您传递不同的ID,它将创建一个新的加载器,但如果您传递相同的ID,它将使用相同的加载器。但是请记住,Cursors不可重用。

关于android - LoaderManager.restartLoader是否创建新对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46639376/

10-11 22:51
查看更多