android AsyncQueryHandler的分析

AsyncQueryHandler 

它实际上就是利用多线程的异步处理功能实现的。

public abstract class AsyncQueryHandler extends Handler {

//这个class用来实现两个Handler之间的数据共享

protected static final class WorkerArgs {

        public Uri uri;

//这个handler必须有,否则便无法实现线程之间的数据通信

        public Handler handler;

        public String[] projection;

        public String selection;

        public String[] selectionArgs;

        public String orderBy;

        public Object result;

        public Object cookie;

        public ContentValues values;

}

//这个class是工作类,用来分担主Handler的处理工作

protected class WorkerHandler extends Handler {

public void handleMessage(Message msg) {

args.result = cursor;

}

/*处理之后的结果放在reply.obj交给主handler使用*/

Message reply = args.handler.obtainMessage(token);

reply.obj = args;

reply.arg1 = msg.arg1;

reply.sendToTarget();

}

//这个是AsyncQueryHandler的构造函数,在里面可以看到初始化工作handler,可以借鉴

public AsyncQueryHandler(ContentResolver cr) {

synchronized (AsyncQueryHandler.class) {

     if (sLooper == null) {

          HandlerThread thread = new HandlerThread("AsyncQueryWorker");

          thread.start();

          sLooper = thread.getLooper();

     }

}

mWorkerThreadHandler = createHandler(sLooper);

}

//这个就用来处理主Handler的消息

public void handleMessage(Message msg) {

/*只不过,在这里,在处理之后,会callback子类的重载函数:onQueryComplete

onInsertComplete onUpdateComplete*/

}

//那么从何处开始呢?

public void startQuery(int token, Object cookie, Uri uri,

            String[] projection, String selection, String[] selectionArgs,

            String orderBy) {

//这里发送Message

Message msg = mWorkerThreadHandler.obtainMessage(token);

msg.arg1 = EVENT_ARG_QUERY;

WorkerArgs args = new WorkerArgs();

args.handler = this;//这里,可以看到将主线程的指针交给workHandler,以便回调

args.uri = uri;

args.projection = projection;

args.selection = selection;

args.selectionArgs = selectionArgs;

args.orderBy = orderBy;

args.cookie = cookie;

msg.obj = args;

mWorkerThreadHandler.sendMessage(msg);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值