美文网首页Android Dev文艺的安卓君android开发
Handler 和他的小伙伴们(中)

Handler 和他的小伙伴们(中)

作者: geniusmart | 来源:发表于2015-09-11 23:59 被阅读5215次

    (一)瓶颈

    上一篇文章中,老张的Handler-Looper-Message模式,在他们人数不多的创业团队里收获奇效。创业的第一年,老张和CTO致力于团队基础技术平台和基础数据平台的建设,产品线也较单一,因此,简单直接而透明的管理模式最为行之有效。然而,随着业务的扩张,技术团队的壮大,这套管理模式出现了瓶颈。

    这个瓶颈是什么呢?由于公司一下子扩招了上百号人,所谓林子大了什么鸟都有,有鸟儿的地方就有鸟语,然而鸟语却未必花香。以前,攻城狮们(Thread)将技术问题(Message)传达给助理(Looper),助理(Looper)再汇集给CTO(Handler)处理。现在可好,攻城狮们一多,技术上的、业务上的、升职加薪方面的、情感方面的问题全部都抛到了CTO和老张这边,严重影响了决策层的精力分配,同时也使得解决问题变得缓慢。

    (二)强项目制

    解决这个瓶颈其实非常简单。在架构中,有分层的概念,同理,在目前的组织结构中,决策层之下直接面对执行层的两层结构显然太过于简单了,解决办法就是再加一层。老张深谙此道并且深谋远虑,他希望调整后的组织结构能达到几个目标:

    第一个目标:以项目区分团队,保证项目Leader的权利。

    第二个目标:Handler-Looper-Message模式能渗透到每个团队中。

    第三个目标:自己、CTO和每个项目Leader间能保持顺畅的沟通。

    第一个目标好实现,老张在公司倡导了“强项目制”的概念。一切的权利必须服从于项目,换言之项目经理在该项目上拥有最大的权利。

    改良后的强项目制结构

    第二个目标如何实现?老张参考了去年一年中CEO-CTO-助理几个角色的定位和能力要求,采用了团队内部选拔和指派空降兵的做法,身为军事迷的他,为组织结构中的这一层命名为团长-政委-助理。几个角色的要求如下:

    1.团长(?):有较强的大局观,性格强势,兼具技术和管理能力,可以不惜一切代价,保证项目的质量和完成的时间点。

    2.政委(Handler):性格较圆润,技术扎实,能处理好攻城狮们在技术面前执拗而项目时间有限的矛盾,能妥善处理好各种人事行政之类的问题。

    3.助理(Looper):这个角色其实和上文中的助理小怡(Looper)的定位是一模一样的,然而经过一年的磨合,老张深刻的了解到,这个职位一定要是漂亮的妹纸!漂亮的妹纸!漂亮的妹纸!

    所以,现在最大的问题在于谁能有能力胜任团长。

    (三)团长与政委

    在一番空前激烈的竞争之后,每个强项目制的团长人选脱颖而出,他们有个共同的特质,能够支撑起Handler-Looper-Message的模式,他是什么?他就是本文的重点——HandlerThread。于是,对于每个项目组来说,人才配备是这样子的:

    团长、政委和团队成员

    我们来看下团长(HandlerThread)具备什么样的能力:

    HandlerThread源码

    通过对HandlerThread源码的分析,我们发现,CTO在选拔团长时,都是参照自己的模样来找的,因为他们有几个共同的特征:

    (1)他们都是线程,一条主线程,一条普通线程。(2)他们都选拔了各自唯一的一名助理小怡和小春(Looper.prepare())。(3)都指派了这名助理协助配合CTO或者政委(Handler)的工作。

    接下来我们来看下团长—政委—助理—攻城狮们之间的工作是怎么开展的:

    团长、政委、助理和攻城狮

    还是一样的配方,熟悉的味道,Handler-Looper-Message的模式贯穿于整HandlerThread中。

    到目前为止,老张设想的三个目标的前两个都已经实现了,那么第三个目标如何来实现?

    (四)领导层对话

    高层和项目组之间如何保持顺畅的沟通?很简单,开会。所以,当一位技术人才崭露头角,做到团长或政委的位置的时候,他们不是在开会就是在开会的路上。每个周一的早上,老张、CTO、CTO助理小怡以及各个项目组的团长、政委,政委助理都要举行一次周例会,助理主要负责记录会议纪要,并传达给相应的领导处理。

    所以,每次会议的关键在于,CEO(UIThread)如何将企业战略和愿景准确的传达至团长(HandlerThread),以及团长(HandlerThread)如何将项目成果充分的展示给CEO(UIThread)以博取更多的权利和资源。用程序的语言来讲,就是UIThread与HandlerThread之间如何实现互相通讯。我们来看下这是如何做到的:

    主线程和HandlerThread之间的通讯

    其实,这里无论是CEO+CTO还是团长+政委,他们有着非常清晰的分工:

    第一条线程:UI主线程—mCTOHandler—Looper

    第二条线程:HandlerThread—mZhengWeiHandler—Looper

    两线程之间的互相通讯便是通过调用另一线程中的Handler发送Message来实现。

    到目前为止,老张的三个目标都实现了,但必须注意的是,老张虽然不喜欢官僚的企业作风,但严格强调团长和政委必须必须恪守自己的权利范围不能越权(UI只能在主线程中处理,HandlerThread中无法处理)。

    (五)下一个难题

    第二年,老张始终在业务高速扩张的激情澎湃和维持团队稳定的小心翼翼中寻找平衡点,他的公司和产品,逐渐在同质化的产品竞争中脱颖而出。这一年,产生了不少优秀的团队和项目,他们在互联网上攻城拔寨,战绩显赫,此时,成绩和利益是否相符,功劳和权利怎么匹配,成为了老张心中最大的难题,那么他是如何解决这些问题的,请看《Handler和他的小伙伴们(下)》

    相关文章

      网友评论

      本文标题:Handler 和他的小伙伴们(中)

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