restartLoader(int id, Bundle args, LoaderCallbacks<D> callback)
是否创建了一个全新的加载器对象?或者它只是通过重置其内部状态来重用旧的?
感谢您的帮助。
答案 0 :(得分:1)
如果您每次拨打
时都传递相同的ID
restartLoader(int id, Bundle args, LoaderCallbacks<D> callback)
它将 REUSE 相同的加载器对象。但是如果你传递一个新的ID
,它将创建一个新的Loader
对象。这种方式的工作方式来自文档检查this quote from the documentation:
启动一个新的或重新启动此管理器中的现有Loader,将回调注册到它,并且(如果活动/片段当前已启动)开始加载它。如果先前已启动具有相同id的加载器,则在新加载器完成其工作时将自动销毁该加载器。回调将在旧的加载器被销毁之前传递。
但是您不必深入研究这一点,因为ID
是本文档指南中的重要内容,check the Loader Summary Here:
要从加载器开始加载数据,请调用initLoader()或restartLoader()。系统自动确定具有相同整数ID的加载器是否已存在,并将创建新加载器或重用现有加载器。
所以简而言之,如果你传递一个不同的ID
,它将创建一个新的加载器但是如果你传递相同的ID
它将使用相同的加载器。但请记住Cursors
不会重复使用。