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/