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

建设网站东莞公司上海网站建设seo推广

建设网站东莞公司,上海网站建设seo推广,做mod的网站,西安云众网站建设文章目录 为什么需要 Looper成员MessageQueueLooperHandler lambda 机制图 为什么需要 Looper main函数/普通函数执行完后,整个进程/线程也就结束了。为了让处理可执行对象的进程/线程长时间运行,需要无限循环加事件通知的机制。 int main() {while(tr…

文章目录

  • 为什么需要 Looper
  • 成员
    • MessageQueue
    • Looper
    • Handler lambda
  • 机制图

为什么需要 Looper

main函数/普通函数执行完后,整个进程/线程也就结束了。为了让处理可执行对象的进程/线程长时间运行,需要无限循环加事件通知的机制

int main()
{while(true){1. 线程进入休眠状态,等待通知;2. 其它地方给当前线程发送通知,线程从休眠中唤醒,读取通知,处理通知3. 进入下一个循环}return 0;
}

成员

MessageQueue

MessageQueue:装message的容器。

  • 使用 pool 享元设计模式。

  • 有消息处理,数量不能过多。pool会超出容量。

  • 根据时间排序,

    • message queue队列满的时候,阻塞,直到用户通过next取出消息。

    • 当出队 next方法 被调用,通知MessagQueue可以进行消息的入队。

    // frameworks/base/core/java/android/os/MessageQueue.javaboolean enqueueMessage(Message msg, long when) {
    

生产者消费者

  • 入队 生产者:子线程 向消息队列添加消息和Handler

  • 出队 消费者工作线程:工作线程依此轮循,轮询到了MSG就会执行

    • java 执行了Looper.loop() 的线程(往往是主线程。因此MSG的消费,执行,都在主线程中)
    • cpp Looper::prepare/new Looper的线程

数量关系:(有说法是每个进程只有一个MessageQueue。但我看起来是觉得每个工作线程都有且只有一个MessageQueue)

  • java

    // frameworks/base/core/java/android/os/Looper.javaprivate static void prepare(boolean quitAllowed) {if (sThreadLocal.get() != null) {throw new RuntimeException("Only one Looper may be created per thread");}sThreadLocal.set(new Looper(quitAllowed));
    }// sThreadLocal.get() will return null unless you've called prepare().
    @UnsupportedAppUsage
    static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
    
  • native

    class Looper : public RefBase {Vector<MessageEnvelope> mMessageEnvelopes; // guarded by mLock
    

Looper

在线程(一般是主线程)中执行Looper.loop(),则这个线程就是“工作线程”。可以认为是MSG的消费者:所有的MSG的消费,执行都是在该线程中。

  • 调用了 Looper::loop() 的线程,会从进程的MessageQueue中取出、处理MSG,并执行Hanlder的重载。

  • 因为 MessageQueue 是线程安全的,所以可以有多个线程调用 Looper::loop(),这些线程并行的处理Hanlder。

对于app来说,这个“工作线程”就是主线程。app启动/挂断,一定是从主线程的 main函数 开始的

// frameworks/base/core/java/android/app/ActivityThread.java
public static void main(String[] args) {// 准备loopLooper.prepareMainLooper();Looper.myLooper().setMessageLogging(new LogPrinter(Log.DEBUG, "ActivityThread"));// 让loop运行起来. 一直循环,保障进程一直执行,如果退出,说明程序关闭Looper.loop();

数量关系:进程中可以在进程中指定一个/多个工作线程,每个工作线程拥有一个Looper

  • 一个线程只允许有一套Handler通讯机制,只有一个Looper

    在native层 一个线程new多个Looper是不建议的,但神奇的是这往往并不会出错,符合能跑就行的思想。

  • 一个进程可以有多个工作线程,从而一个进程中可有多个Looper

Handler lambda

狭义的来说

  • Handler是一个类,一个线程有多个 Handler对象 ——设计模式命令模式
  • 定义 Handler时,需要指定 Looper 意味着于此同时确定了对应的MessageQueue和工作线程。
  • 各个线程怎么区分其中的msg该让哪个Handler执行呢?
    • Handler.sendMessage时会把this(也就是哪个Handler)传递给MessageQueue。
    • 所以,才能让对应 Handler 执行其 handleMessage方法

广义来说:Handler是一种线程通信的方案。

  • 作为方案,MessageQueue和Looper也包含其中

  • 实际上是内存共享的方案

    • MessageQueue这个容器 在同一进程中的线程间是 共享 的,

    • 主线程可以通过loop死循环去不断的访问 MessageQueue。

为什么 wait/notify用处不大:因为handler已经将需要这部分功能进行了Linux层的封装 使用epoll多路IO复用进行管理。

机制图

解决线程之间的通讯:(并不跨进程)

其他跨线程通信:retrofit,eventbus,rxjava都是使用了主线程MainThread的,底层都使用了Handler机制(Looper机制)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


文章转载自:

http://1oKNeV7T.rLxnc.cn
http://6Bct1UE6.rLxnc.cn
http://6XAvfRJB.rLxnc.cn
http://6Qkq7guh.rLxnc.cn
http://HBOMShPp.rLxnc.cn
http://n7d3gMTa.rLxnc.cn
http://A4MxHlAZ.rLxnc.cn
http://FKZHDO45.rLxnc.cn
http://drsFgUtB.rLxnc.cn
http://4TMFrzLv.rLxnc.cn
http://fFD1SdUv.rLxnc.cn
http://774CvTCn.rLxnc.cn
http://AzFRu9Sb.rLxnc.cn
http://tKVFQBRM.rLxnc.cn
http://YZ8gNQK7.rLxnc.cn
http://hYfFF4e9.rLxnc.cn
http://5o6QO3dd.rLxnc.cn
http://aCyAjZ4e.rLxnc.cn
http://ZHZAvsEo.rLxnc.cn
http://W34lIDVf.rLxnc.cn
http://EsY1hgjs.rLxnc.cn
http://7W7H5sjW.rLxnc.cn
http://j6mvSJEz.rLxnc.cn
http://cISjMVOV.rLxnc.cn
http://ZV7WlO5x.rLxnc.cn
http://qu1OgKiN.rLxnc.cn
http://0fjm0z4N.rLxnc.cn
http://nH7gZGmP.rLxnc.cn
http://jt2jBwH1.rLxnc.cn
http://BEn6dCnu.rLxnc.cn
http://www.dtcms.com/wzjs/648784.html

相关文章:

  • 黄岛王台有做网站的吗网页制作如何设置网页背景
  • 分类信息网站建设房屋设计软件免费版
  • 书法网站模版深圳做网站的地方
  • 网站 建设 公司加快建设乡镇招商网站
  • 德州网站建设招聘几度设计网站
  • 企业网站最下面的那栏叫啥厦门建网站网址
  • 大连企业建设网站南昌专业的学校网站建设公司
  • 建设网站是什么意思成都网站建设多少费用
  • 江苏网站建设包括哪些域名注册是什么意思
  • 城阳网站建设公司电话网站首页title
  • 新野网站建设石家庄
  • 网站建设 调研报告网络建设公司名称
  • 网站标题栏做多大asp网站建设 文献综述
  • 哈尔滨旅游团购网站建设wordpress 主题 google字体
  • 响应式网站模板dede南宁排名seo公司
  • 网站建设:上海珍岛猫猫出品wordpress
  • asp flash网站模板做网站怎么申请百度推广
  • ico网站图标买了万网的域名跟定制网站还要买空间吗
  • 余姚有专业做网站的吗重庆工程项目
  • 直播网站开发技术怎样成立网站
  • 免费搭建商城网站怎样制作一个购物小程序
  • 企业网站建设商城东莞推广
  • 做代理稳妥的彩票网站有哪些wordpress透明主题下载地址
  • 个人网站建设案例课堂阿里巴巴国际站怎么网站建设
  • 泉州学校网站建设网站推广的具体方案
  • 微分销商城网站建设做期货要关注哪些网站
  • 做网站安全维护是什么东东多个域名 指向同一个网站
  • 如何做生鲜配送网站生意建网站麻烦拍照备案审核多久
  • 广东网站建设网站建阅读网站
  • 陕西西安网站建设公司哪家好wordpress支持手机适应