Android Native 实用型开发指南

[本文尚未完成]

网络上很多Android教程,但过于侧重基础知识,研发经验不足的初学者看完后很难建立起系统性的概念,特写本文给新人们培训用。本文非入门型文档,无意识的忽略了很多Android基础知识,建议具备一些Android的基础知识后阅读。


期望的特性

  • 支持设备自适应
  • Android各组件形成标准使用模式
  • 支持模块化开发与管理

设备自适应:

使用Android提供的无关性单位

单位范围
dp设备无关的像素描述,用于代替px(像素)
sp设备无关的文字描述,用于代替pt

Activity、Fragment、Layout组合运用

Android各组件使用模式

先给出一张架构图,来描述Android开发需要的模块架构,然后再分析Android各组件适合使用的位置。架构图如下:

Created with Raphaël 2.1.0 UI UI Service Service Base Component Base Component 调用功能 UI指Activity、Fragment等界面型组件, 其只能调用Service 调用功能 BaseComponent可以是任意基础组件 返回结果 返回结果。

说明

  • UI完成用户交互,其只能与Service交互
  • Service负责调用具体模块的功能,并将处理结果反馈给UI
  • BaseComponent是功能逻辑的实现
  • 全部通过Interface进行调用,松耦合

UI界面

UI部分需要实现所有的界面逻辑,使用的组件组要为Activity、Fragment、Layout、Toast等等。
UI部分的工作主要有三部分:

  • 构建BaseActivity 封装所有通用的Activity功能,作为所有Activity的基类
  • Activity、Fragment、Layout构建自适应布局方案
  • Layout的定制开发(很多情况下Layout是需要根据项目需要进行定制开发的)
  • 界面数据的保存与恢复(与Android的生命周期概念密切相关)

    这里特别需要注意生命周期、生存期、数据保存与恢复这几个概念,理解透彻之后才能对UI开发得心应手


Fragment和Activity的生命周期对照表
ActivityFragment说明
onAttachFragment和Activity建立关系时调用
onCreateonCreate
onCreateView为Fragment加载Layout时调用
onCreateonActivityCreated当Activity中的onCreate方法执行完后调用
onStartonStart
onResumeonResume
onPauseonPause
onStoponStop
onDestroyViewfragment的布局移除时调用
onDestroyonDestroy
onDetachfragment和Activity解除关系时调用
Backstack:所有Activity都保存在一个堆栈中,按返回键都是将最上面的踢出,如果Backstack为空则App退出。
生存期范围
完整生存期onCreate ~onDestroy
可见生存期onStart ~ onStop
前台生存期onResume ~ onPause
Activity lunchMode:调用startActivity的效果
lunchMode效果
Standard(default)每次都会创建一个新的Activity
SingleTop如果Activity在顶部则不再创建(反之就会创建)
SingleTask整个BackStack中只有一份,如果调用startActivity则会将其之上的Activity全部弹出BackStack
SingleInstance最复杂的模式,单开一个Backstack(多App共享Activity的模式下可以使用)
Android中Activity响应时间是有限制的(好象是5秒),过于耗时的程序会被系统回收,所以多线程、服务会伴随每个App存在。

Service后台服务

Service是Android后台最重要的部分,UI中的Activity、Fragment等等只能与Service进行交互,再由Service与其他组件完成交互(如db、content provider等等)。特别注意一点,每一个Service都应该是单例。
在Service部分主要完成两件事:

  • 确定与Activity的交互模型(ServiceConnection、IBinder),这部分工作可以形成标准模板
  • 组织BaseComponent完成业务逻辑

在编写Demo的时候也可以把BaseComponent的功能放入Service中,但强烈不建议在UI中实现BaseComponent的功能。

Base Component基础组件

Base Component部分会涵盖除了UI和Service之外的其他所有所有组件,包括DataPersistence、ContentProvider、Notification、Boardcast等等。

DataPersistence
ComtentProvider
Notification

提示信息使用,配合PendingIntent可以响应用户的点击操作

Boardcast

Boardcast按作用域可以分为两种类型:

typeInfluence
LocalBoardcast只在本App中有效
GlobalBoardcast在整个Android平台都有效

LocalBoardcast与GlobalBoardcast可以被封装到BaseActivity中


Boardcast按特性分可以分为:

typeInfluence
Normal Broadcast类似UDP,接收顺序不固定
Ordered Broadcast类似TCP,可以设定priority,可以在onReceive中调用abortBroadcast()打断本次广播

对于Boardcast完全可以封装在BaseActivity中,作为项目组开发框架的一部分。

模块化开发

当前google已经在推广Android Studio,其基于IntelliJ 的免费版进行定制开发,各方面与Eclipse的提升不是一点半点,强烈推荐使用

Android Studio中使用gradle作为构建、依赖管理工具,其特性与maven很相似,具备maven基础则可以5分钟内上手。

关于maven的基础知识可以参考另一篇的 maven综合实践

基础模块库

基础模块基本都是可复用的service、代码片段、配置项等等,这是我们开发过程中需要积累的重要过程资产,比如:

  • 基础gradle配置项
  • Activity与Fragment进行设备自适应的标准代码
  • BaseActivity构建(提供一键关闭、两次按键退出、全局context、自动注销服务、自动注销广播等等)
  • Service与Activity通信的标准代码
  • Service HTTP标准代码(Android 4.0后http库产生了变化)
  • 通用的升级检测、下载模块
  • 对象持久化标准库
  • XML、JSON标准库、标准代码
  • 。。。
    个人认为:基础模块库有多强大,团队战斗力就有多强大

具体项目

具体项目都是根据需求来的,无法笼统的给出解决办法,但可以确定的一条准则是:
  • 提炼通用型的需求并将其合并入基础模块库
  • 具体项目一定要专注于BL设计、UI设计
  • 对具体项目进行开发的同时一定要同步推进基础模块库的进化

当一个团队具备了很强大、完善的Android基础模块库,具体项目的开发就会得心应手


给新人的Best Practice

  • Activity和Fragment中只有UI逻辑,作为显示载体
    • Activity和Fragment组合使用,配合尺寸和单位,使满足设备无关要求
    • 这里的工作为多研究layout的使用,完成UI设计
  • Service封装业务逻辑,负责调用更底层的功能
    • 依靠ServiceConnection、IBinder与Activity进行交互
    • 一个应用中应该包含很多Service
    • 适当运用前台服务(setForeground)
    • bindService与unbindService要成对出现
    • 这里的工作多为项目组基础积累,多封装基本功能
  • 每个Activity、Fragment都要考虑好数据的保存与加载(onSaveInstanceStatce)
  • Content Provider 在一般中小型App中主要用于 获取系统数据,很少会作为数据提供方,新人做到会读即可
  • Notification 作为交互的手段,向用户提示信息(附带震动、声音、led闪烁等等效果),并可以接受点击(使用PendingIntent)
  • Broadcast 的标准化应用
    • 捕获系统事件,比如网络连接、断开
    • App内部通讯使用
    • 为了安全,尽可能使用LocalBroadcast,GlobalBroadcast主要用来接收系统广播
  • 一定要建立基础库与具体项目的概念(熟悉gradle)
    • 基础库大多为标准service、代码库等等,在日常开发中要养成不断积累的习惯,这样才能提高开发效率
    • 具体项目为目标项目,其工作重心更多为UI设计、BL设计

总结

个人认为,对于绝大多数的Android应用,其核心思想是做有创意的应用,工作量集中于各种形式的UI设计。

脚注

生成一个脚注1.



  1. 这里是 脚注内容.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值