`LoaderManager.restartLoader`是否创建了一个新对象?

时间:2017-10-09 05:30:46

标签: android android-asynctask asynctaskloader

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

感谢您的帮助。

1 个答案:

答案 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不会重复使用。