使用LoaderManager

时间:2015-08-06 04:00:53

标签: android android-loadermanager

在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;
    }
}

大部分时间都可以正常工作,但在一个特殊情况下崩溃可怕。假设我启动了第二个活动或在此基础上推送一个修改FIRST数据的片段。现在,当我使用上面的代码导航回活动/片段时,首先使用FIRSTSECOND的旧数据刷新我,并且FIRST启动SECOND,{ {1}}将重新加载新数据。现在,自SECOND更改后,它会再次加载,这会导致另一个FIRST加载启动。

首先,如果你计算总计两个SECOND(一个旧的和一个新的)和三个FIRST(两个旧的和一个新的)的负载,至少接缝有点浪费。我真的不介意,除了调试很麻烦,但在我看来它也表现得不确定,因为你不知道哪些负载会先完成。如果SECONDSECOND之间的关系发生变化,或者我最终会使用缓存的值,我会最终获得FIRST的新数据吗?

我知道我可以通过记录何时重启第二个加载器来减轻这种情况,但必须有更好的方法来实现这一点。

稍微澄清一下:如果SECOND中的行包含对FIRST中行的引用,并且在后面导航后SECOND中的行包含了FIRST中的行,则问题最突出不要像以前那样指向SECOND中的相同行。

0 个答案:

没有答案