android后台任务(三):Loader

本文介绍如何使用Android系统提供的Loader机制来执行后台任务。通过自定义Loader类并实现LoaderManager.LoaderCallbacks接口,可以在Activity或Fragment中轻松地加载和更新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Loader也是android运行后台任务的方法之一,并且是谷歌推荐的,可以使用CursorLoader,也可以自定义Loader来实现异步任务,下面是使用方法。
一、编写一个自定义Loader继承自AsyncTaskLoader

    //我是在Activity内部编写,所以是静态内部类
    private static class MyLoader extends android.support.v4.content.AsyncTaskLoader<String>
    {
        private String result;
        public MyLoader(Context context)
        {
            super(context);
        }
        //判断是否已经有结果了,如果有,调用deliverResult(result),会直接回调onLoadFinished(),将result作为data传入。
        @Override
        protected void onStartLoading()
        {
            super.onStartLoading();
            if (result != null)
            {
                deliverResult(result);
            } else
            {
                forceLoad();
            }
        }
        //这里写任务执行的代码,会在工作线程执行
        @Override
        public String loadInBackground()
        {
            //模拟延迟5秒
            try
            {
                Thread.sleep(5000);
            }catch (Exception e)
            {
            }
            result = "这是查询结果";
            return result;
        }
    }

二、让需要使用Loader的Activity或者Fragment实现LoaderManager.LoaderCallbacks接口,复写三个回调函数,可以自定义任务结果的返回类型,这里是String。

public class Test2 extends AppCompatActivity implements LoaderManager.LoaderCallbacks<String>
{
    //这个方法会在后台任务初始化完成之后调用
    //需要让他返回一个Loader实例,而Loader实例定义了后台任务
    @Override
    public Loader<String> onCreateLoader(int id, Bundle args)
    {
        return new MyLoader(this);
    }

    //这个函数将在后台任务完成之后被调用,并且传入结果data
    //可以在这里更新UI
    @Override
    public void onLoadFinished(Loader<String> loader, String data)
    {
        tv.setText(data);
    }

    @Override
    public void onLoaderReset(Loader<String> loader)
    {
    }

}

三、在需要开始执行后台任务的地方执行initLoader

getSupportLoaderManager().initLoader(1,null,this);

这是在Activity当中,Fragment中是

getLoaderManager().initLoader(URL_LOADER, null, this);

整个的执行过程是这样:
一、initLoader
二、调用onCreateLoader(),获得Loader实例
三、执行完Loader中的任务
四、调用onLoadFinished()

Loader的实现使用Asynctask,而Asynctask的实现使用Handler+Looper+Thread。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值