如何快速高效地完成一个Android项目?
本文的内容有别于之前文章中纯技术的探讨,会从业务逻辑、技术、团队和方法论的角度探讨如何快速高效地完成一个Android项目。当然,快速高效是有前提的,第一,本文依然是从研发的角度来谈如何把控项目的,而这种研发人正如陈皓在《技术人员的发展之路》中提到的,需要具备高效的学习能力和解决问题的能力。另外,快速需要保证质量,没有质量的速度是不负责任的。
一、业务逻辑
计算机科学的核心是通过数据结构和算法实现对现实世界的抽象,平台是会随着技术发展不断变迁的,只有数据本身所描述的这种抽象才是事物永恒的本质。作为研发,笔者推荐通过数据结构来理解业务逻辑,比如,数据库建模需要对系统中所有的实体关系进行抽象,是理解业务逻辑的核心。当然,可能有不少App研发人对后台的业务逻辑并不太关心,但实话讲,任何依赖于平台(Windows、Symbian、Android、iOS……)的开发者是没有安全感的,平台是会不断迭代的,研发人需要去抓住那些本质的、稳定的计算机科学的核心知识。有点跑题,举个栗子,一个进销存管理的Android软件,先抛开复杂的、精细的管理流程不讲,从最小可行产品(MVP)来说,主要会包括如下业务:
- 进货=选商品+加库存;
- 销售=选商品+减库存;
- 库存=查库存+库存修改(商品修改);
- 基础资料=新增/修改店铺+新增/修改商品;
- 报表=入出操作流水。
对于一个店铺来讲,进货需要选品和增加库存量,选品的方式可能包括扫描69码或从库存添加(69码最终也会对应库存中的SKU);销售包含选品和减少库存量;库存包含增删改查等基本操作;基础资料包含店铺信息、人员信息、设备信息等;基础报表包含利润、进货明细、销售明细、对账等操作流水。当然,上述业务框架仅仅是MVP,并未考虑ERP、WMS中精细化管理的各种场景,但对于App的研发来讲,这也是最基础需要了解的。
二、技术
本节将从Android开发的角度来说明在快速开发中最常用、最重要的几点技术:
数据结构和算法。正如业务逻辑中讲到的,数据结构和算法是软件技术的核心,在快速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、信号量、栅栏等各自的应用场景是什么,实现原理?如何将串行任务并行化?锁的实现原理是什么?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开发团队,这里列出几个笔者认为比较重要的点:
- 研发团队不能管理的太紧,关键是要制定好标准,搭好框架,然后在遵循统一的标准下保持进度。研发要避免过度管理,自由、开放的环境更有利于产品研发工作,流程、制度约束太多对创新无益。团队成员更多的是协作,而不是管理。
- 技术团队Leader的工作包括:搭建稳定、可靠的开发框架,模块化、插件化架构,网络通信请求回调方法,单元测试流程,技术调研,渠道包管理,产品、UI和测试团队的沟通协作,需求讨论及工期安排,各种核心流程图及文档,Code Review,崩溃日志分析及处理等等
- 团队是有人构成的,团队中需要有各种不同类型的人,有担当、能救火的人;有远见、能防火的人;有执行力、靠谱的人;有喜感、能活跃氛围的人;有独立思考、事事能提出不同意见的人……以上总总,只要是能给团队带来正面影响的人,作为团队Leader,一定要以开放、妥协、灰度的眼光求同存异。
四、方法论
从个人的角度来讲,如何在高度压力之下完成大量的工作?不管在公司承担重要项目,还是自己创业,这都是不可避免的话题。以下谈谈笔者个人的体会和方法:
- 节奏。工作的时候要全身心投入,避免各种打扰,比如测试提的BUG,各种会议,要尽量保证工作的连续性,避免被打扰。完成了一周紧张的工作,要及时的休息,脑袋里完全抛开工作上的事情,做一些其他轻松的事情,比如笔者喜欢写写毛笔字、喝点小酒,总之,做一些与工作完全无关的事情。
- 计划。凡事遇则立,不预则废,一定要有计划,要有明确的条理,知道今天该完成什么,明天该完成什么,进度该怎么把控,有什么风险点,所有的事情一定要提前定好计划,没有准备的仗是一定打不赢的。有了计划之后,才会工作的走向有所把控,心里才有底,面对领导、同事以及相关工作人的时候,才会有底气,也才会有自信心。
最后,和大家分享一个经历和体会,与本文标题没有直接关系,没兴趣的话可以直接跳过。
上上周末完成了一次从北京的东南到西北的徒步穿越,全程接近40公里。徒步是最简单的一种思考方式,用脚步这种最原始的方式去经历每一处风景。
- 在你到达目标的过程中,不可能一条平坦开阔的大路走到底,还要去走很多没人走过的小路。大路走的人多,你觉得很有安全感;小路人迹罕至,你很担心自己走错。但如果你的目标是终点,你就勇敢的走下去吧。其实路没有大小,只有你是否能通过此路到达目标。
- 如果你一开始就决定要走一条很长的路,那么一开始的走左边,还是右边其实影响不大,到达目标的路径有千万种选择。对于一个长跑选手来说,重要的是方向和节奏。只要大方向对,以**为起点,只要朝着西北方向,保持每小时3-5公里的节奏,目标终能到达。
- 人走在路上,到了中点的时候,可能脚下已经起了水泡,每走一步都很疼。这正如人到中年,工作、职场、家人、身体已经已经落下很多的问题,要去解决这些问题,就会很疼。往回走,就是失败;站在原地,就会彷徨;所以只能往前走,遇到困难,死活顶上去,保持进步的节奏,你才可能朝目标前进。很多人到了中年之后开始向各种问题妥协,其实就相当于站在原地,彷徨。
以上。
如何快速高效地完成一个Android项目?的更多相关文章
- 用Kotlin创建第一个Android项目(KAD 01)
原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...
- 3.创建第一个android项目
安卓开发学习笔记 1.安卓开发之环境搭建 2.SDK目录结构和adb工具及命令介绍 3.创建第一个android项目 1.打开Eclipse,选择File——>new——>others.. ...
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
一.搭建Android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 下载地址:Eclipse:http://www.eclipse.org/downloads/ ...
- 第一个Android项目——计算器
第一个Android项目——计算器 效果 开始学Android一两个星期了,学习了一下基本的Activity.简单控件及几个简单布局,打算找个东西来练练手,于是就选择发计算器.关于计算器中用到的四则运 ...
- 第03讲- 第一个Android项目
第03讲第一个Android项目 Android项目目录结构: 重要文件: src res AndroidManifest.xml 包含内容: MainActivity.java (程序主视图) 存放 ...
- 【Android Developers Training】 1. 创建一个Android项目工程
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android开发】创建你的第一个Android项目
原文:http://android.eoe.cn/topic/summary 本文中你将了解到: 1. 使用Eclipse创建项目 2. 使用命令行创建项目 你还应该阅读: 1. 安装SDK(官网页面 ...
- Creating an Android Project(创建一个android项目)
一个android项目包含了你的应用程序中的所有源代码文件,我们可以通过android sdk tools轻松地创建一个拥有默认文件跟文件夹的android项目. 这部分课程我们将展示两种创建andr ...
- [Android开发教程]Android官网developer training中文版教程 - 1.1.1 创建一个Android项目
本系列持续更新中.转载请注明来源. 前言:近期打算系统学习一下Android开发,发现Android官网上的developer training也是个非常好的学习资料,于是想到一边学习一边写一个中文版 ...
随机推荐
- Linux中FTP服务器的搭建
vmware12上安装的CentOs6.8,最终实现物理机上的windows10能正常访问CentOs上的FTP服务器. 一.查看是否安装有ftp相关的安装包. # rpm -qa | grep vs ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十五)——SpringMVC注解开发(基础篇)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7065294.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十四)--S ...
- 【Android Developers Training】 72. 缩放一个视图
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- H5学习第三周
今天主要总结弹性布局 flex使用 1.给父容器添加display flex/inline-flex;属性 2.父容器可以使用的属性值有 >>>flex-direction 属性决定 ...
- CSS input type="number"出现上下箭头时解决方案
input type="number"时录入内容不可控制,解决方案是在css中添加//火狐input[type=number] { -moz-appearance:tex ...
- 快速查询List中指定的数据
时间:2017/5/15 作者:李国君 题目:快速查询List中指定的数据 背景:当List中保存了大量的数据时,用传统的方法去遍历指定的数据肯定会效率低下,有一个方法就是类似于数据库查询那样,根据索 ...
- java编译出错信息汇总(更新)
1. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 原因:缺包mysql-connector-java-5.1.7-bin.jar 2 ...
- Java语言的9个主要特性
Java作为时下很流行的一门编程语言,受到很多人的热爱,那么它有哪些特性呢?一起来看看吧. 1.Java语言是简单的 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用.另 ...
- zoj 3963 heap partion
https://vjudge.net/problem/ZOJ-3963 题意: 给出一个数列,可以用这个数列构造一种二叉树,这个二叉树满足数的下标 i <= j,并且 si <= sj,s ...
- saveOrupdate和 merge的区别
merge和saveOrUpdate方法区别在于:merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供的对象变成一个持久化对象:说的通俗一点就是:saveOr ...