Android AsynctaskLoader重置状态

Android AsynctaskLoader重置状态,android,loader,Android,Loader,这似乎是一个愚蠢的问题,但我无法理解AsynctaskLoader的状态 我已经阅读了好几次文档,以及网络上的其他教程。但是,我仍然无法理解Asynctask何时处于重置状态 看看从官方文档中提取的这段代码。 您可能会认为,如果装载机第一次没有启动,它将处于停止状态,为什么要重新启动 我想我并不真正了解加载程序对活动生命周期的反应,但文档中没有任何说明。“但是,我仍然无法理解异步任务何时处于重置状态” 我相信你的意思是“…当装载机处于静止状态时” 通常,可以使用LoaerManager来管理装

这似乎是一个愚蠢的问题,但我无法理解AsynctaskLoader的状态

我已经阅读了好几次文档,以及网络上的其他教程。但是,我仍然无法理解Asynctask何时处于重置状态

看看从官方文档中提取的这段代码。

您可能会认为,如果装载机第一次没有启动,它将处于停止状态,为什么要重新启动

我想我并不真正了解加载程序对活动生命周期的反应,但文档中没有任何说明。

“但是,我仍然无法理解异步任务何时处于重置状态”

我相信你的意思是“…当装载机处于静止状态时”

通常,可以使用LoaerManager来管理装载机的生命周期

当用户调用LoaderManager#destroyLoader()时,LoadManager将从其缓存中删除此加载程序。 当调用LoaderManager#restartLoader()或当活动/片段进入销毁阶段时,也可能销毁加载程序。 如果此类加载程序以前将数据传递给其客户机(通常是片段或活动),则LoaderManager将调用onLoaderReset()并指示加载程序重置。 这为客户机提供了删除对数据的任何引用以及加载程序释放与数据关联的任何资源的机会。 请记住,数据的所有者是加载器,而不是客户机

“我的问题是:为什么我们要询问加载程序是否已重置?”

deliverResult在UI线程的上下文中调用,但在完成实际加载的后台线程时触发。 在后台线程完成之前,可以将加载程序状态更改为reset()。 执行check isReset()以避免在加载程序处于重置状态的竞争条件下通知客户端新数据

“它被重置意味着什么?”

处于重置状态的加载程序应停止其所有操作,因为它可能会在重置后不久被销毁。 特别是,它应该释放以前加载的数据占用的任何资源,停止加载新数据并监视下划线数据源中的更改

“您可能会认为,如果装载机第一次没有启动,它会处于停止状态,为什么要重新启动?”

停止状态表示加载程序以前处于启动状态。 在停止状态下,加载程序可能具有以前加载的数据,并且应该监视下划线数据源中的更改。 装载机可以从停止状态返回到启动状态或重置状态。 如果重新启动,则在数据源停止时,如果数据源中没有任何更改,则可以使用以前加载的数据

创建加载程序时,但在启动之前,它被视为处于重置状态。 这很好,因为在这种状态下,还没有加载数据,而且加载程序不应该执行上述任何操作。


我想这对你有帮助。这张地图显示了android的生命周期和加载器的生命周期。

很好,你从哪里得到这张图表的?
@Override public void deliverResult(List<AppEntry> apps) {
    if (isReset()) {
        // An async query came in while the loader is stopped.  We
        // don't need the result.
        if (apps != null) {
            onReleaseResources(apps);
        }
    }
/**
 * Return whether this load has been reset.  That is, either the loader
 * has not yet been started for the first time, or its {@link #reset()}
 * has been called.
 */