简介
不管是在Android应用开发还是Android平台开发中,异步处理通常是最基本的coding要求。如果你还在主线程中写一些数据库,网络请求,读写本地文件等操作的话那说明你还不是一个合格的Android程序员。
通常情况下我们使用的最多的Android异步处理方法是AsyncTask
和Handler
,但今天要给大家带来的是大家不常使用的AsyncTaskLoader
的使用方法。
AsyncTaskLoader
从名字看出来它似乎和AsyncTask
有关系,看一下Google官方是怎么给AsyncTaskLoader
下定义的:
Abstract Loader that provides an AsyncTask to do the work
果然是样,AsyncTaskLoader
是使用一个AsyncTask
来进行异步处理的。那么问题来了,既然都有了AsyncTask
了为什么还要搞出来一个AsyncTaskLoader
呢?
其实AsyncTaskLoader
远没有大家想的那么简单。说的通俗一点,如果把AsyncTask
比作一台烤面包机的话,那么AsyncTaskLoader
就是操作烤面包机的面包师。AsyncTask
如同烤面包机接受命令完成面包的烤制任务,一旦任务完成它就停止了工作。然而AsyncTaskLoader
如同面包师一样要根据顾客的需求来使用烤面包机。顾客会不停的光顾,那么面包师就会不停的使用烤面包机烤面包。
具体事例
下面我们就通过烤面包机和面包师的例子来演示一下AsyncTaskLoader
的使用方法。
首先肯定少不了面包师(Baker):
package com.example.asyncloaderdemo;
import java.util.ArrayList;
import java.util.List;
import android.content.AsyncTaskLoader;
import android.content.Context;
public class Baker extends AsyncTaskLoader<List<Bread>> {
// 用于查询当前需要多少个面包
BakeryCallback mCallback;
//面包房回调,用于获得当面面包需求量
interface BakeryCallback {
int getNeededBreads();
}
public Baker(Context context, BakeryCallback callback) {
super(context);
mCallback = callback;
}
@Override
public List<Bread> loadInBackground() {
List<Bread> breads