记一次述职演讲

各位评委,技术大神,你们好。接下来我将用大约12分钟的时间,讲述过去一年里我在安卓客户端上的工作情况。

工作业绩和成果

首先说说我的工作业绩和成果,分为两个部分:

京旺安卓客户端开发

第一部分,京旺安卓客户端迭代开发

该App是面向京东家电专卖店店主使用。作为主程,独立完成了从1.8版本到2.0,2.1大版本的改造。在京旺App里我引入了Material Design材质设计的交互,实现了材质设计的部分动画效果。

举两个我在京旺App里实现的例子:

左图,是京旺App主页,当手指向上滑动时,轮播图的阴影和背景色从深到浅形成渐变,100%的实现了设计师的设计意图和理念,让App变得灵动。

在材质设计的世界里,水波纹是典型的交互方式,我把这一方式应用到了搜索栏上,如右图所示:用户点击搜索图标,搜索栏水波纹展开。

京商慧安卓客户端开发

第二部分,京商慧安卓客户端迭代开发

该App是VC系统的移动端,我参与了从1.5版本到2.3.2版本的迭代开发,完成了厂直管理模块,定额返利与返利协议模块,部分售后管理模块,意见反馈和回复相关页,分类,待办页和我的页面

技术成长与积累

接下来,是我的技术成长与积累

我将从四个部分进行陈述,分别是第一安卓自定义控件,第二UI适配,第三面向对象的设计能力,第四App性能

安卓自定义控件

我的技术成长第一部分是实现了可复用的安卓自定义控件

有下拉列表控件,该控件实现的功能是:如图,点击服务单详情展开一个下拉列表。

第二个自定义控件是图片选择器,该控件实现的功能是:提供用户从手机相册里选取至多5张图片进行上传。

第三个自定义控件是下拉刷新控件,该控件实现的功能是:用户下拉页面刷新时,展示铜钱和金元宝滚动的动画,直至刷新结束,传递京旺App能带给家电专卖店主金钱收益。在安卓开源世界里,下拉刷新控件已经有很好的轮子了。我实现的这个控件多少有重复造轮子的嫌疑。

所以,我重点说下第一个控件,下拉列表。

先说说当前行业里下拉列表的情况

如左图,是美团App的外卖主页,可以看到点击筛选,展开下拉列表之前有短暂的停顿,同时下拉列表的展开也缺乏动画过渡。

右图是我实现的下拉列表控件的效果。消除了下拉时不自然的停顿,增加了下拉展开的动画效果。

接下来,我简单地说下,我做的下拉列表的实现思路:我把下拉列表拆分成两个部分:父控件FilterLayout和子控件FilterFooter。父控件负责核心的交互逻辑,如下拉列表的展开和收缩。子控件实现下拉列表的内容,不同的下拉内容用不同的子控件实现。通过这样组合的方式,保证逻辑耦合处在一个合适的程度。

现阶段下拉列表主要支持的特性有:支持代码和布局混合控制,支持两种动画下拉,支持父控件和子控件协同控制下拉动画的方式

UI适配

我的技术成长第二部分是UI适配

现在市面上各主流App,都实现了沉浸式的标题栏–即把顶部状态栏和页面内容融合在一起,如左图所示。对于安卓4.4及以下的系统,如右图所示。统一了不同安卓系统版本下的UI展示。

面向对象的设计能力

我的技术成长第三部分是提高了面向对象的设计能力

App项目中,对话框使用频率很高,不同的页面的对话框要求展示不同的内容。如何更好的维护和管理项目里的对话框呢?为此我建立了一套对话框管理体系。根据谷歌官方的文档,对话框最佳实践是:页面Activity里的FragmentManager管理DialogFragment,DialogFragment管理AlertDialog。基于这样的认识我去考虑逻辑和组织类。如下图所示,蓝色的FragmentManager在Activity里,黄色的DialogFragment部分通过继承体现,绿色的AlertDialog在DialogFragment里通过工具类生成。

传统的安卓App页面使用的是重量级的Activity,带来的问题是:安卓App页面跳转不如苹果App那般畅快?为了解决这个问题,在京旺App里我使用了更轻量的Fragment建立起单Activity多Fragment的页面组织体系。有效提高了App页面切换响应的速度,这样做的代价是增加了我对页面状态的维护难度,增加了代码量。如下图,我建立起了四级Fragment继承体系和三级Activity继承体系,为了防止基类的脆弱性问题,我对每个类和方法写了详细的说明和注释。

App性能

我的技术成长第四个部分是优化App性能

我尝试并实践了从这三个方面来优化App性能:分别是避免内存泄漏,优化布局以及优化App响应。

典型事件分析

说完了技术成长与积累,接下来我说说典型事件介绍。

前几周,新上线的厂直管理待出库列表页,当列表只剩下一条记录时,点击出库按钮,App崩溃。我在测试环境里复现了该问题,该问题使用了第三方开源框架,通过阅读相关类的源码推测得出:我调用的方法在这个场景下存在问题。于是尝试了调用新的方法,问题得到了解决。

其他能力展示

接下来,我说说自己在其他方面的能力,分为两个部分。

技术博客

第一部分对外技术输出

在京旺App上实践了单Activity多Fragment的页面组织方式,提高了页面跳转的响应速度,我把对这块内容的思考写成了技术博客,发布到简书后,有4千多的阅读量,获得15次评论和2次赞赏。发布到掘金后,获得了255个点赞,并成为当天的热门文章。

第二部分是,对内Kotlin知识分享。

今年年初我在部门做了主题为:开启Kotlin编程之旅的技术分享。之后我和同样对Kotlin感兴趣的小伙伴组成了Kotlin学习小组。分享频率是:1到2周,分享一次。右图是我们Kotlin知识分享的海报(在这里顺带感谢下靖莹设计师的友情支持),目前小组内我进行了5次Kotlin分享。我把分享的知识点整理成文章放到了知乎专栏上,分享产生的代码上传到了Github上。

之所以投入如此多的精力在Kotlin上,是因为我看好Kotlin的发展,因为作为一门新语言,繁荣所满足的几个条件,Kotlin现在都具备了。

  • 第一,有程序界里的大神背书(前段时间Think In Java的作者Bruce在京东的演讲就在推广Kotlin);
  • 第二,新的编程语言是否有杀手级的应用场景?有的,Kotlin目前杀手级应用是在安卓上,它得到了谷歌官方的支持;
  • 第三,新的语言学习和迁移的成本是否足够低?是的,够低。Kotlin支持和Java100%的兼容和相互调用;
  • 第四,新的语言是否足够先进,以提高代码生产力?—Kotlin够先进。Kotlin是2016年发布1.0正式版本的现代化的简洁语言,有着动态语言的语法以及高程度的函数式编程支持。

所以我非常看好Kotlin,Kotlin里这些新的更现代化的语言特性,是我喜欢Kotlin的原因。

不足和改进计划

最后,说说我的不足和改进计划

在过去一年工作中,我感受到自己编程基础知识的薄弱,安卓系统Fragmentwork层工作机制不够熟悉,项目架构能力不够,对此,我打算通过阅读技术书籍:比如算法,Effective Java和Java函数式编程以及通过坚持写博客和技术分享来提高项目架构能力和编程基础知识。

小结

以上是我述职的所有内容,谢谢大家