Android基础-AsyncTaskLoader 的用法

AsyncTaskLoader 作用

AsyncTaskLoader主要针对的是Activity配置的变化(屏幕旋转),不会引起数据的变化 同时数据源的变化可以实现自动更新 。

使用方法

核心类 AsyncTaskLoader

package com.su.asyncloaderdemo;

import android.content.AsyncTaskLoader;
import android.content.Context;
import android.util.Log;

public class MyAsyncTaskLoader extends AsyncTaskLoader<People> {

    public MyAsyncTaskLoader(Context context) {
        super(context);
    }

    @Override
    protected void onStartLoading() {
        super.onStartLoading();
        Log.d(Constant.TAG, "onStartLoading");
        // 触发 loadInBackground 的事件,防止loadInBackground 不执行
        forceLoad();
    }

    // 子线程运行,结束后会回调 onLoadFinished
    @Override
    public People loadInBackground() {
        Log.d(Constant.TAG, "loadInBackground");
        People mPeople = new People();
        mPeople.name = MyAsyncTaskLoader.class.getSimpleName();
        return mPeople;
    }

    // UI线程运作
    @Override
    public void deliverResult(People data) {
        super.deliverResult(data);
        Log.d(Constant.TAG, "deliverResult " + data.toString());
    }

}

注意:
1. forceLoad() 防止loadInBackground 不执行
2. loadInBackground() 结束后会回调 onLoadFinished

使用 AsyncTaskLoader

package com.su.asyncloaderdemo;

import android.app.Activity;
import android.app.LoaderManager;
import android.content.Loader;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity implements
        LoaderManager.LoaderCallbacks<People> {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        getLoaderManager().restartLoader(1, Bundle.EMPTY, this);
    }

    @Override
    public Loader<People> onCreateLoader(int id, Bundle args) {
        Log.d(Constant.TAG, "onCreateLoader");
        return new MyAsyncTaskLoader(this);
    }

    @Override
    public void onLoadFinished(Loader<People> loader, People result) {
        Log.d(Constant.TAG, "onLoadFinished result = " + result);
    }

    @Override
    public void onLoaderReset(Loader<People> arg0) {

    }

}

重点
1. LoaderManager.LoaderCallbacks
2. getLoaderManager().restartLoader(1, Bundle.EMPTY, this);
3. onLoadFinished 数据结果

其他

package com.su.asyncloaderdemo;

public class People {
    public String name;

    @Override
    public String toString() {
        return "People [name=" + name + "]";
    }
}

package com.su.asyncloaderdemo;

public class Constant {

    public static final String TAG = "suhuazhi";

}

运行结果

01-04 08:39:46.659  5506  5506 D suhuazhi: onCreateLoader
01-04 08:39:46.664  5506  5506 D suhuazhi: onStartLoading
01-04 08:39:46.668  5506  5522 D suhuazhi: loadInBackground
01-04 08:39:46.779  5506  5506 D suhuazhi: onLoadFinished result = People [name=MyAsyncTaskLoader]
01-04 08:39:46.780  5506  5506 D suhuazhi: deliverResult People [name=MyAsyncTaskLoader]

关键字

AsyncTaskLoader用法 onLoadFinished loadInBackground forceLoad LoaderCallbacks

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值