美文网首页
Android Framework学习之同步处理消息

Android Framework学习之同步处理消息

作者: 一只二凡子 | 来源:发表于2023-01-08 13:13 被阅读0次

    怎么同步处理消息?

    这个服务可以是应用自己的服务,也可以是系统服务,请求都会调到binder线程池里,binder线程将请求转到工作线程里去处理,工作线程在处理这个请求的过程中,这个binder线程一直在那等着。应用端也一直等着返回结果。

    在工作线程处理请求的原因:binder线程不想上锁,因为IPC调用是在binder线程池里,涉及到多线程同步的问题。倒出上锁很麻烦。

    Framework有哪些同步处理消息的场景

    应用端向SurfaceFlinger发起创建surface请求,native层

    应用端向SurfaceFlinger发起创建surface请求,java层

    DEMO工程,测试同步处理消息

    同步处理消息有几种处理方式:

        1. 反射调用Handler的runWithSissors方法

    不要在UI线程调用这个方法,这个方法可能会把UI线程挂起,这个方法不能拿到返回结果

    2. BlockingRunnable

            可以得到result

        3. 

            FutureTask;实现了Runnable和Future,可以得到处理结果

    动态代理怎么统一切换工作线程?

    setName方法是运行在binder线程里,

    现在要统一把setName方法切换到别的线程

    通过动态代理生成mServiceImpl对象,他其实是RemoteServiceImpl的动态代理,这个动态代理的作用:虽然mServiceImpl.setName(name)运行在binder线程,但RemoteServiceImpl的接口比如setName,是运行在UI线程的

    相关文章

      网友评论

          本文标题:Android Framework学习之同步处理消息

          本文链接:https://www.haomeiwen.com/subject/wfghqdtx.html