我所理解的Android编程思想Android开发经验谈Android开发

如何快速高效地完成一个Android项目?

2017-08-10  本文已影响242人  yhthu

本文的内容有别于之前文章中纯技术的探讨,会从业务逻辑技术团队方法论的角度探讨如何快速高效地完成一个Android项目。当然,快速高效是有前提的,第一,本文依然是从研发的角度来谈如何把控项目的,而这种研发人正如陈皓在《技术人员的发展之路》中提到的,需要具备高效的学习能力解决问题的能力。另外,快速需要保证质量,没有质量的速度是不负责任的。

一、业务逻辑

计算机科学的核心是通过数据结构和算法实现对现实世界的抽象,平台是会随着技术发展不断变迁的,只有数据本身所描述的这种抽象才是事物永恒的本质。作为研发,笔者推荐通过数据结构来理解业务逻辑,比如,数据库建模需要对系统中所有的实体关系进行抽象,是理解业务逻辑的核心。当然,可能有不少App研发人对后台的业务逻辑并不太关心,但实话讲,任何依赖于平台(Windows、Symbian、Android、iOS……)的开发者是没有安全感的,平台是会不断迭代的,研发人需要去抓住那些本质的、稳定的计算机科学的核心知识。有点跑题,举个栗子,一个进销存管理的Android软件,先抛开复杂的、精细的管理流程不讲,从最小可行产品(MVP)来说,主要会包括如下业务:

对于一个店铺来讲,进货需要选品和增加库存量,选品的方式可能包括扫描69码或从库存添加(69码最终也会对应库存中的SKU);销售包含选品和减少库存量;库存包含增删改查等基本操作;基础资料包含店铺信息、人员信息、设备信息等;基础报表包含利润、进货明细、销售明细、对账等操作流水。当然,上述业务框架仅仅是MVP,并未考虑ERP、WMS中精细化管理的各种场景,但对于App的研发来讲,这也是最基础需要了解的。

二、技术

本节将从Android开发的角度来说明在快速开发中最常用、最重要的几点技术:

  1. 数据结构和算法。正如业务逻辑中讲到的,数据结构和算法是软件技术的核心,在快速Android开发过程中,需要了解Java中的各种数据类型的实现及原理。比如下列问题是否了然于胸?

1、List、Queue、Stack的实现有哪些异同?ArrayList如何实现扩容?PriorityQueue、LinkedBlockQueue的主要特性是什么?直接在循环中删除List的元素为什么会报ConcurrentModificationException?
2、如何实现树的深度遍历、广度遍历?文件系统如何使用二叉树建模?红黑树有什么特性,主要的应用场景是什么?
3、Hash原理是什么?HashMap的Key有什么注意事项?Java中是如何解决Hash冲突的,有哪些解决Hash冲突的办法?基于Hash冲突的攻击是什么原理?为什么要重写hashcode和equals方法?LinkedHashMap、TreeMap以及SortMap有什么异同,各自的应用场景是什么?Map如何通过迭代器进行遍历?
4、如何对Collections中的元素进行排序?Compareable和Comparator有什么区别?如何实现线程安全的集合类?常见的并发场景有哪些?闭锁、FutureTask、信号量、栅栏等各自的应用场景是什么,实现原理?如何将串行任务并行化?锁的实现原理是什么?

  1. Android中的View、WMS及AMS的知识。如果是数据是应用的灵魂,那么View、WMS及AMS就是应用的外观。因此,应用要求良好的交互性、体验等,就需要深入理解View的原理及WMS的知识。比如下列常见的问题是否理解?

1、RecyclerView的使用,是否了解其与ListView的区别?RecyclerView嵌套与适配器?如何响应Item中控件的操作?如何在RecyclerView与Activity之间通信,并实现数据联动?RecyclerView在ScrollView中的显示需要注意什么问题?
2、自定义View需要重写哪些方法?invalidate()和postInvalidate() 的区别及使用?如何实现具有动画效果的View?View的层次关系是什么?Android中的事件类型有哪些?事件的传递过程?ViewGroup和View在事件处理方面有什么异同?
3、Activity界面的层次?Window、WindowManager以及WindowManagerService之间的关系?如何通信?
4、Activity的启动过程如何?主线程消息队列如何启动?ActivityThread与AMS如何通信?Activity在异常情况下的生命周期?如何在Service中实现对Activity的跨进程回调?

需要说明的,这里提到的技术点并不是像面试中问到的,因为面试时需要探探应试者的深度,这里主要是说明快速开发中直接使用的技术,也是最需要掌握的基础知识。笔者最近准备写个系列文章,从八个方面来说明对Android开发的理解,主要包括:数据结构与算法、网络通信编程、线程与并发、进程的通信与调度、View体系及WMS、四大组件及AMS、设计模式与架构、性能优化与虚拟机,敬请期待~~

三、团队

在需要快速高效完成项目的场景下,团队的沟通、协作是非常重要的。如何带领一个Android开发团队,这里列出几个笔者认为比较重要的点:

四、方法论

从个人的角度来讲,如何在高度压力之下完成大量的工作?不管在公司承担重要项目,还是自己创业,这都是不可避免的话题。以下谈谈笔者个人的体会和方法:

  1. 节奏。工作的时候要全身心投入,避免各种打扰,比如测试提的BUG,各种会议,要尽量保证工作的连续性,避免被打扰。完成了一周紧张的工作,要及时的休息,脑袋里完全抛开工作上的事情,做一些其他轻松的事情,比如笔者喜欢写写毛笔字、喝点小酒,总之,做一些与工作完全无关的事情。
  2. 计划。凡事遇则立,不预则废,一定要有计划,要有明确的条理,知道今天该完成什么,明天该完成什么,进度该怎么把控,有什么风险点,所有的事情一定要提前定好计划,没有准备的仗是一定打不赢的。有了计划之后,才会工作的走向有所把控,心里才有底,面对领导、同事以及相关工作人的时候,才会有底气,也才会有自信心。

最后,和大家分享一个经历和体会,与本文标题没有直接关系,没兴趣的话可以直接跳过。
上上周末完成了一次从北京的东南到西北的徒步穿越,全程接近40公里。徒步是最简单的一种思考方式,用脚步这种最原始的方式去经历每一处风景。

以上。

上一篇下一篇

猜你喜欢

热点阅读