Android 在AsyncTaskLoader中何时以及为什么调用deliverResult?

Android 在AsyncTaskLoader中何时以及为什么调用deliverResult?,android,callback,loader,asynctaskloader,Android,Callback,Loader,Asynctaskloader,我想对AsyncTaskLoader生命周期有一个很好的了解。我检查了几个资源,除了deliverResult的用法之外,一切都很清楚。根据互联网上的这张图片(): 将调用onStartLoading,然后如果已经加载了数据,则调用deliverResult,然后将结果传递给onLoadFinished。但是,如果没有数据,则将调用foceLoad,然后是loadInBackground,然后是deliverResult,然后是onLoadFinished 我的做法与croworc的回答相同:

我想对AsyncTaskLoader生命周期有一个很好的了解。我检查了几个资源,除了deliverResult的用法之外,一切都很清楚。根据互联网上的这张图片():

将调用onStartLoading,然后如果已经加载了数据,则调用deliverResult,然后将结果传递给onLoadFinished。但是,如果没有数据,则将调用foceLoad,然后是loadInBackground,然后是deliverResult,然后是onLoadFinished

我的做法与croworc的回答相同:

代码如下:

public class WeatherLoader extends AsyncTaskLoader<List<Weather>> {

    List <Weather> receivedData;
    /** Tag for log messages */


    private String mUrl;


public WeatherLoader(Context context, String url) {
        super(context);
        mUrl = url;
    }

    @Override
    protected void onStartLoading() {
        if (receivedData == null){
            Log.i ("loader ", "No data yet");
            forceLoad();
        } else {
            deliverResult(receivedData);
            Log.i ("loader ", "data is available no reload");
        }

    }

    @Override
    public void deliverResult(List<Weather> data) {
        receivedData = data;

        super.deliverResult(data);
        Log.i ("loader ", "deliver result");
    }

    @Override
    public List<Weather> loadInBackground() {
        Log.i ("loader ", "load in background");
        if (mUrl == null) {
            return null;
        }

        // Perform the network request, parse the response, and extract a list of earthquakes.
        List<Weather> weather = getweatherData(mUrl);
        return weather;
    }

}
在这种情况下,即使是
onLoadFinished
也不会被调用但是,如果我使用deliverResult和它的原始行为(我只调用它的超级版本)执行导航到另一个活动并返回到第一个活动的相同行为,则会调用onStart,然后加载Background,然后是onLoadFinished,然后是deliverResult。因此,新的负载发生了

任何人都可以澄清为什么会发生这种回调行为吗?这是否意味着显示生命周期的图像不准确


谢谢

在调用super之前放置日志调用,并再次检查流序列

在调用super.deliverResult期间调用onLoadFinished

     @Override
    public void deliverResult(List<Weather> data) {

        Log.i ("loader ", "deliver result");
        receivedData = data;

        super.deliverResult(data);

    }
@覆盖
公共无效交付结果(列表数据){
Log.i(“装载机”、“交付结果”);
接收数据=数据;
super.deliverResult(数据);
}
     @Override
    public void deliverResult(List<Weather> data) {

        Log.i ("loader ", "deliver result");
        receivedData = data;

        super.deliverResult(data);

    }