【发布时间】:2017-10-09 05:30:46
【问题描述】:
restartLoader(int id, Bundle args, LoaderCallbacks<D> callback) 是否创建了一个全新的加载器对象?还是只是通过重置其内部状态来重用旧的?
感谢您的帮助。
【问题讨论】:
标签: android android-asynctask asynctaskloader
restartLoader(int id, Bundle args, LoaderCallbacks<D> callback) 是否创建了一个全新的加载器对象?还是只是通过重置其内部状态来重用旧的?
感谢您的帮助。
【问题讨论】:
标签: android android-asynctask asynctaskloader
如果每次调用都传递相同的ID
restartLoader(int id, Bundle args, LoaderCallbacks<D> callback)
它将重用相同的加载器对象。但是如果你传递一个新的ID 它将创建一个新的Loader 对象。从文档检查this quote from the documentation:
在这个管理器中启动一个新的或重新启动一个现有的加载器,注册回调,并且(如果活动/片段当前已启动)开始加载它。如果之前已经启动了具有相同 id 的加载器,它将在新加载器完成其工作时自动销毁。回调将在旧加载器被销毁之前传递。
但您不必深入研究这一点,因为 ID 是本文档指南中的重要内容,check the Loader Summary Here:
要开始从加载器加载数据,请调用 initLoader() 或 restartLoader()。系统会自动判断是否已经存在具有相同整数 ID 的加载器,要么创建新的加载器,要么重用现有的加载器。
简而言之,如果您传递不同的ID,它将创建一个新的加载器,但如果您传递相同的ID,它将使用相同的加载器。但请记住Cursors 不会被重复使用。
【讨论】: