zoukankan      html  css  js  c++  java
  • 如何快速高效地完成一个Android项目?

    本文的内容有别于之前文章中纯技术的探讨,会从业务逻辑技术团队方法论的角度探讨如何快速高效地完成一个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开发团队,这里列出几个笔者认为比较重要的点:

    • 研发团队不能管理的太紧,关键是要制定好标准,搭好框架,然后在遵循统一的标准下保持进度。研发要避免过度管理,自由、开放的环境更有利于产品研发工作,流程、制度约束太多对创新无益。团队成员更多的是协作,而不是管理。
    • 技术团队Leader的工作包括:搭建稳定、可靠的开发框架,模块化、插件化架构,网络通信请求回调方法,单元测试流程,技术调研,渠道包管理,产品、UI和测试团队的沟通协作,需求讨论及工期安排,各种核心流程图及文档,Code Review,崩溃日志分析及处理等等
    • 团队是有人构成的,团队中需要有各种不同类型的人,有担当、能救火的人;有远见、能防火的人;有执行力、靠谱的人;有喜感、能活跃氛围的人;有独立思考、事事能提出不同意见的人……以上总总,只要是能给团队带来正面影响的人,作为团队Leader,一定要以开放、妥协、灰度的眼光求同存异。

    四、方法论

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

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

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

    • 在你到达目标的过程中,不可能一条平坦开阔的大路走到底,还要去走很多没人走过的小路。大路走的人多,你觉得很有安全感;小路人迹罕至,你很担心自己走错。但如果你的目标是终点,你就勇敢的走下去吧。其实路没有大小,只有你是否能通过此路到达目标。
    • 如果你一开始就决定要走一条很长的路,那么一开始的走左边,还是右边其实影响不大,到达目标的路径有千万种选择。对于一个长跑选手来说,重要的是方向和节奏。只要大方向对,以**为起点,只要朝着西北方向,保持每小时3-5公里的节奏,目标终能到达。
    • 人走在路上,到了中点的时候,可能脚下已经起了水泡,每走一步都很疼。这正如人到中年,工作、职场、家人、身体已经已经落下很多的问题,要去解决这些问题,就会很疼。往回走,就是失败;站在原地,就会彷徨;所以只能往前走,遇到困难,死活顶上去,保持进步的节奏,你才可能朝目标前进。很多人到了中年之后开始向各种问题妥协,其实就相当于站在原地,彷徨。

    以上。

  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/younghao/p/7337337.html
Copyright © 2011-2022 走看看