AsyncQueryHandler异步处理框架

来源:互联网 发布:肉身不腐 知乎 编辑:程序博客网 时间:2024/05/21 20:34

AsyncQueryHandler封装了调用者线程与工作线程的交互过程。交互的主体是两个Handler,一个运行在调用者线程中,一个运行在工作者线程中。通过提供onXXXComplete的回调接口,实现事件的完成处理。

 

public abstract class AsyncQueryHandler extends Handler {

    protected class WorkerHandler extends Handler {

        @Override
        public void handleMessage(Message msg) {

              // 运行在工作者线程中

              WorkerArgs args = (WorkerArgs) msg.obj;

              // 向调用者传回信息

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

        }

    }

    public AsyncQueryHandler(ContentResolver cr) {
        synchronized (AsyncQueryHandler.class) {

            // 启动工作者线程
            if (sLooper == null) {
                HandlerThread thread = new HandlerThread("AsyncQueryWorker");
                thread.start();
                sLooper = thread.getLooper();
            }
        }

        // 与工作者线程绑定的Hanlder
        mWorkerThreadHandler = createHandler(sLooper);
    }

    public void startQuery(...) {
        Message msg = mWorkerThreadHandler.obtainMessage(token);
        WorkerArgs args = new WorkerArgs();

        // 保存调用者Handler对象,以便回调
        args.handler = this;
        msg.obj = args;
        // 向工作者线程发出处理请求
        mWorkerThreadHandler.sendMessage(msg);
    }

    // 被子类重写的事件完成回调接口

    protected void onDeleteComplete(int token, Object cookie, int result) {
    }

    @Override
    public void handleMessage(Message msg) {
        // 运行在调用者线程

        switch (event) {
            case EVENT_ARG_QUERY:
                onQueryComplete(token, args.cookie, (Cursor) args.result);
                break;
        }   

   }

}

流程:startQuery->WorkerHandler::handleMessage->AsyncQueryHandler::handleMessage->onDeleteComplete


原创粉丝点击