【问题标题】:Does `LoaderManager.restartLoader` create a new object?`LoaderManager.restartLoader` 会创建一个新对象吗?
【发布时间】:2017-10-09 05:30:46
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

    标签: android android-asynctask asynctaskloader


    【解决方案1】:

    如果每次调用都传递相同的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 不会被重复使用。

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      相关资源
      最近更新 更多