AsyncQueryHandler

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

publicabstractclassAsyncQueryHandlerextendsHandler{

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

protectedstaticfinalclassWorkerArgs{

publicUriuri;

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

publicHandlerhandler;

publicString[]projection;

publicStringselection;

publicString[]selectionArgs;

publicStringorderBy;

publicObjectresult;

publicObjectcookie;

publicContentValuesvalues;

}

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

protectedclassWorkerHandlerextendsHandler{

publicvoidhandleMessage(Messagemsg){

args.result=cursor;

}

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

Messagereply=args.handler.obtainMessage(token);

reply.obj=args;

reply.arg1=msg.arg1;

reply.sendToTarget();

}

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

publicAsyncQueryHandler(ContentResolvercr){

synchronized(AsyncQueryHandler.class){

if(sLooper==null){

HandlerThreadthread=newHandlerThread("AsyncQueryWorker");

thread.start();

sLooper=thread.getLooper();

}

}

mWorkerThreadHandler=createHandler(sLooper);

}

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

publicvoidhandleMessage(Messagemsg){

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

onInsertCompleteonUpdateComplete*/

}

//那么从何处开始呢?

publicvoidstartQuery(inttoken,Objectcookie,Uriuri,

String[]projection,Stringselection,String[]selectionArgs,

StringorderBy){

//这里发送Message

Messagemsg=mWorkerThreadHandler.obtainMessage(token);

msg.arg1=EVENT_ARG_QUERY;

WorkerArgsargs=newWorkerArgs();

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);

}

}

更多相关文章

  1. 我的Android工作笔记
  2. Android(安卓)4.0 wifi 和 Ethernet 的实现分析
  3. android 访问WebService
  4. 安卓WebView与JavaScript交互
  5. 在Android中访问WebService接口
  6. android细节:各种context
  7. 使用Maven管理Android项目(二)
  8. resolveActivity解析
  9. 基于Android的Linux内核的电源管理:Early Suspend

随机推荐

  1. (M)Android消息处理机制分析之Handler类解
  2. [Android] 监听系统网络连接打开或者关闭
  3. 如何裁剪android 系统?
  4. Android(安卓)Studio更新Android(安卓)SD
  5. Android字体表
  6. android 界面自适应屏幕尺寸相关
  7. Android全屏处理
  8. 转:android TextView中超链接的事件捕捉(te
  9. Android(安卓)Studio发布项目到Maven私有
  10. Android(安卓)Audio代码分析 - Audio Str