当前位置: 首页 > news >正文

做的好的网站欣赏猪肉价格最新消息

做的好的网站欣赏,猪肉价格最新消息,wordpress前台注册插件,wordpress 统计字数AHandler系列 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客 【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客 其他系列 本人系列文章-CSDN博客 1.简介 前面两篇我们主要介绍了有回复和无回复的消息的使用方法和源码解析&a…

AHandler系列

【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客

【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客

其他系列

本人系列文章-CSDN博客


1.简介

前面两篇我们主要介绍了有回复和无回复的消息的使用方法和源码解析,为了更好的理解Ahandler这个类的作用,本篇便主要对AHandler类的所有方法进行全解。

简单介绍一下Ahandler机制

AHandler是Android native层实现的一个异步消息机制,在这个机制中所有的处理都是异步的,将消息封装到一个消息AMessage结构体中,然后放到消息队列中去,后台专门有一个线程ALooper会从这个队列中取出消息然后分发执行,执行函数就是AHandler实例的onMessageReceived。

在AHandler中的消息分为不需要回复的消息和需要回复的消息。

不需要回复的消息:当被post到消息队列后,Alooper会从消息队列中取出消息,并发送给相应的Ahandler的onMessageReceived进行处理。

需要回复的消息:当被post到消息队列后,Alooper会从消息队列中取出消息,并发送给相应的Ahandler的onMessageReceived进行处理,处理完后,Ahandler会将想回复的消息返回给发送方,发送方接受返回的response消息。

1.1 主要类及其作用

AHandler:处理类,用于消息的处理,有一个纯虚函数onMessageReceived,一般需要继承此类并重写此方法,用于接受和处理消息。

AMessage:消息类,用于构建各种消息,通过post方法将消息发送给Alooper

Alooper:轮询类,用于保存消息队列,然后将消息发送到对应的AHandler

AReplyToken:这类似一个标识,表示要回复的是哪一条消息

 1.2 类图

2.源码解析

2.1 AHandler类

AHandler这个类一般用作子类,需要使用Ahandler机制通信时候,需要继承此类,并重写onMessageReceived这个方法。

struct AHandler : public RefBase {//RefBase类是andorid中用于引用计数的类AHandler(): mID(0),mVerboseStats(false),mMessageCounter(0) {}//默认构造函数的实现。ALooper::handler_id id() const {//函数后面+const表示常函数。不能修改成员属性的值return mID;}sp<ALooper> looper() const {//获取looper的强智能指针return mLooper.promote();}wp<ALooper> getLooper() const {//获取looper的弱智能指针return mLooper;}wp<AHandler> getHandler() const {// allow getting a weak reference to a const handlerreturn const_cast<AHandler *>(this);}protected:virtual void onMessageReceived(const sp<AMessage> &msg) = 0;//纯虚函数private:friend struct AMessage;      // deliverMessage(),//AMessage作为友元类,AMessage可以访问AHandler中的私有成员。friend struct ALooperRoster; //ALooper::handler_id mID;//用于设置handler的id,以区分不同的handlerwp<ALooper> mLooper;inline void setID(ALooper::handler_id id, const wp<ALooper> &looper) {mID = id;mLooper = looper;}bool mVerboseStats;//代表详细状态,主要用于dump信息时会用到uint32_t mMessageCounter;//表示消息的数量KeyedVector<uint32_t, uint32_t> mMessages;void deliverMessage(const sp<AMessage> &msg);//用于发送消息DISALLOW_EVIL_CONSTRUCTORS(AHandler);
};

2.2 AHandler::deliverMessage

1.从本系列的前面两篇,我们也应该十分清楚,最终looper会调用到deliverMessage方法,从而回到继承自AHandler子类我们重写的onMessageReceived中。

void AHandler::deliverMessage(const sp<AMessage> &msg) {onMessageReceived(msg);//此时便回到了继承Ahndler的子类的Ahandler中mMessageCounter++;//message数量+1if (mVerboseStats) {//默认mVerboseStats值为false,代表详细状态,主要用于dump信息时会用到uint32_t what = msg->what();ssize_t idx = mMessages.indexOfKey(what);if (idx < 0) {mMessages.add(what, 1);} else {mMessages.editValueAt(idx)++;}}
}

http://www.bjxfkj.com.cn/article/106339.html

相关文章:

  • 南京网站建设排名seo在哪学
  • 学做网站什么语言合适深圳网站seo公司
  • 怎么做外贸网站seo新人做外贸怎么找国外客户
  • 笔趣阁 网站开发今天新疆新闻头条
  • wordpress仿威客插件杭州云优化信息技术有限公司
  • 建设微信商城网站常用的关键词挖掘工具
  • 武汉网站建设询搜点网络网络营销主要是什么
  • 外贸营销型网站制作百度一下网页打开
  • php网站开发技术描述sem和seo的区别
  • 温州网站建设这个平台营销策略都有哪些
  • 巨鹿做网站哪家好分类信息网站平台有哪些
  • 河南网站建设公看b站二十四小时直播间
  • 腾讯云服务器网站建设seminar什么意思中文
  • 自己想做一个网站怎么做的网站开发公司哪家好
  • 网站建设分金手指排名二九国产系统2345
  • 中国做木线条的网站个人博客登录入口
  • 南京专业做网站公司手机百度2022年新版本下载
  • 东莞网站建设推广自助建站系统哪个好用
  • 郑州网站优化效果怎么做小说推广挣钱
  • 炫酷网站建设域名注册后如何建网站
  • 洛阳建筑公司排名seo外包服务
  • 网站开发公司vue框架新媒体运营培训学校
  • 怎么做自己的网站?厦门网络推广培训
  • 网站新闻列表怎么做如何制作自己的公司网站
  • 网站开发合同变更百度竞价排名事件
  • 饿了吗网站如何做惠州关键词排名优化
  • 一个做外汇的网站叫熊猫什么的长沙建站工作室
  • 张家港快速网站建设今日新闻最新头条10条内容
  • 做网站资金来源是什么营销方案设计思路
  • 衡阳百度网站建设可以免费投放广告的平台