Android Native 实用型开发指南
2015-12-23 09:47
316 查看
[本文尚未完成]
期望的特性
设备自适应
使用Android提供的无关性单位
ActivityFragmentLayout组合运用
Android各组件使用模式
UI界面
Service后台服务
Base Component基础组件
DataPersistence
ComtentProvider
Notification
Boardcast
模块化开发
基础模块库
具体项目
给新人的Best Practice
总结
脚注
网络上很多Android教程,但过于侧重基础知识,研发经验不足的初学者看完后很难建立起系统性的概念,特写本文给新人们培训用。本文非入门型文档,无意识的忽略了很多Android基础知识,建议具备一些Android的基础知识后阅读。
Android各组件形成标准使用模式
支持模块化开发与管理
Created with Raphaël 2.1.0UIUIServiceServiceBase ComponentBase Component调用功能UI指Activity、Fragment等界面型组件,其只能调用Service调用功能BaseComponent可以是任意基础组件返回结果返回结果。
说明
UI完成用户交互,其只能与Service交互
Service负责调用具体模块的功能,并将处理结果反馈给UI
BaseComponent是功能逻辑的实现
全部通过Interface进行调用,松耦合
UI部分的工作主要有三部分:
构建BaseActivity 封装所有通用的Activity功能,作为所有Activity的基类
Activity、Fragment、Layout构建自适应布局方案
Layout的定制开发(很多情况下Layout是需要根据项目需要进行定制开发的)
界面数据的保存与恢复(与Android的生命周期概念密切相关)
这里特别需要注意生命周期、生存期、数据保存与恢复这几个概念,理解透彻之后才能对UI开发得心应手
Fragment和Activity的生命周期对照表
Backstack:所有Activity都保存在一个堆栈中,按返回键都是将最上面的踢出,如果Backstack为空则App退出。
Activity lunchMode:调用startActivity的效果
Android中Activity响应时间是有限制的(好象是5秒),过于耗时的程序会被系统回收,所以多线程、服务会伴随每个App存在。
在Service部分主要完成两件事:
确定与Activity的交互模型(ServiceConnection、IBinder),这部分工作可以形成标准模板
组织BaseComponent完成业务逻辑
在编写Demo的时候也可以把BaseComponent的功能放入Service中,但强烈不建议在UI中实现BaseComponent的功能。
LocalBoardcast与GlobalBoardcast可以被封装到BaseActivity中
Boardcast按特性分可以分为:
对于Boardcast完全可以封装在BaseActivity中,作为项目组开发框架的一部分。
Android Studio中使用gradle作为构建、依赖管理工具,其特性与maven很相似,具备maven基础则可以5分钟内上手。
关于maven的基础知识可以参考另一篇的 maven综合实践
基础gradle配置项
Activity与Fragment进行设备自适应的标准代码
BaseActivity构建(提供一键关闭、两次按键退出、全局context、自动注销服务、自动注销广播等等)
Service与Activity通信的标准代码
Service HTTP标准代码(Android 4.0后http库产生了变化)
通用的升级检测、下载模块
对象持久化标准库
XML、JSON标准库、标准代码
。。。
个人认为:基础模块库有多强大,团队战斗力就有多强大
提炼通用型的需求并将其合并入基础模块库
具体项目一定要专注于BL设计、UI设计
对具体项目进行开发的同时一定要同步推进基础模块库的进化
当一个团队具备了很强大、完善的Android基础模块库,具体项目的开发就会得心应手
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提供的无关性单位
ActivityFragmentLayout组合运用
Android各组件使用模式
UI界面
Service后台服务
Base Component基础组件
DataPersistence
ComtentProvider
Notification
Boardcast
模块化开发
基础模块库
具体项目
给新人的Best Practice
总结
脚注
网络上很多Android教程,但过于侧重基础知识,研发经验不足的初学者看完后很难建立起系统性的概念,特写本文给新人们培训用。本文非入门型文档,无意识的忽略了很多Android基础知识,建议具备一些Android的基础知识后阅读。
期望的特性
支持设备自适应Android各组件形成标准使用模式
支持模块化开发与管理
设备自适应:
使用Android提供的无关性单位
单位 | 范围 |
---|---|
dp | 设备无关的像素描述,用于代替px(像素) |
sp | 设备无关的文字描述,用于代替pt |
Activity、Fragment、Layout组合运用
Android各组件使用模式
先给出一张架构图,来描述Android开发需要的模块架构,然后再分析Android各组件适合使用的位置。架构图如下:Created with Raphaël 2.1.0UIUIServiceServiceBase ComponentBase 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的生命周期对照表
Activity | Fragment | 说明 |
---|---|---|
onAttach | Fragment和Activity建立关系时调用 | |
onCreate | onCreate | |
onCreateView | 为Fragment加载Layout时调用 | |
onCreate | onActivityCreated | 当Activity中的onCreate方法执行完后调用 |
onStart | onStart | |
onResume | onResume | |
onPause | onPause | |
onStop | onStop | |
onDestroyView | fragment的布局移除时调用 | |
onDestroy | onDestroy | |
onDetach | fragment和Activity解除关系时调用 |
生存期 | 范围 |
---|---|
完整生存期 | onCreate ~onDestroy |
可见生存期 | onStart ~ onStop |
前台生存期 | onResume ~ onPause |
lunchMode | 效果 |
---|---|
Standard(default) | 每次都会创建一个新的Activity |
SingleTop | 如果Activity在顶部则不再创建(反之就会创建) |
SingleTask | 整个BackStack中只有一份,如果调用startActivity则会将其之上的Activity全部弹出BackStack |
SingleInstance | 最复杂的模式,单开一个Backstack(多App共享Activity的模式下可以使用) |
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按作用域可以分为两种类型:type | Influence |
---|---|
LocalBoardcast | 只在本App中有效 |
GlobalBoardcast | 在整个Android平台都有效 |
Boardcast按特性分可以分为:
type | Influence |
---|---|
Normal Broadcast | 类似UDP,接收顺序不固定 |
Ordered Broadcast | 类似TCP,可以设定priority,可以在onReceive中调用abortBroadcast()打断本次广播 |
模块化开发
当前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.这里是 脚注 的 内容. ↩
相关文章推荐
- Android Studio上用真机调试时,无法查看Logcat日志信息解决方法
- java android 转ios积累
- Android端立体电子相册的制作
- Android开发者要懂得快捷键
- Android Studio入门到精通
- Android蓝牙开发流程
- 深入浅析Android JSON解析
- Android Studio中Gradle使用详解
- android jni开发初
- android 调用浏览器跳转指定页面
- Android编程开发之Spinner组件用法
- 如何制作自己的android升级…
- android自定义控件实现刮刮乐效果
- Android机型适配之痛
- Android开发笔记(二十四)res目录的结构与配置
- android国际化(多语言)
- Android之JSON解析
- 《Android源码设计模式解析与实战》读书笔记(十)
- Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析
- 体验极速Android Sdk更新与下载