gpt4 book ai didi

android - 使用 LoaderManager 加载依赖查询的首选方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:10 27 4
gpt4 key购买 nike

在 Android 中使用 LoaderManager API 加载依赖查询的首选方法是什么?到目前为止,我能想到的最好的方法是:

@Override
public void onCreate( Bundle savedInstanceState ) {
getLoaderManager().initLoader( FIRST, null, this );
}

@Override
public void onLoadFinished( Loader<Cursor> loader, Cursor data ) {
switch ( loader.getId() ) {
case FIRST:
Bundle args = new Bundle();
args.putInt( ID, somethingFromData( data ) );
getLoaderManager().restartLoader( SECOND, args, this );
break;

case SECOND:
somethingElseFromData( data );
break;
}
}

这在大多数情况下都可以正常工作,但在一种特殊情况下会严重崩溃。假设我启动了第二个 Activity 或在此基础上推送了一个修改 FIRST 数据的 fragment 。现在,当我使用上面的代码导航回 Activity/fragment 时,它首先使用 FIRSTSECOND 的旧数据刷新我,因为 FIRST 启动 SECONDSECOND 重新加载新数据。现在,由于 FIRST 已更改,它会再次加载,这会导致启动另一次 SECOND 加载。

首先,如果您算一下,总计有两次加载 FIRST(一个旧的和一个新的)和三个加载的 SECOND(两个旧的和一个新的) ),这至少有点浪费。我真的不介意这一点,除了它调试起来很麻烦,但在我看来它的行为也不确定,因为你不知道哪些负载会先完成。如果 FIRSTSECOND 之间的关系发生变化,我最终会得到 SECOND 的新数据,还是会得到缓存的值?

我知道我可以通过记录何时重启第二个加载程序来缓解这种情况,但必须有更好的方法来做到这一点。

澄清一点:如果 FIRST 中的行包含对 SECOND 中行的引用,并且在向后导航之后 中的行,则问题最为突出加载的 code>FIRST 未指向 SECOND 中与之前相同的行。

最佳答案

鉴于您的第一个加载器所做的唯一一件事就是有效地为您的第二个加载器准备参数,您应该将您自己的 AsyncTaskLoader 子类化并在一个加载器中完成整个操作。

This article包含一个非常深入的自定义 AsyncTaskLoader 示例,我相信您可以根据自己的需要进行调整。您还应该查看 CursorLoader source code以便更好地掌握如何编写自己的代码。

关于android - 使用 LoaderManager 加载依赖查询的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com