您的位置:首页 > 移动开发 > Android开发

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各组件形成标准使用模式

支持模块化开发与管理

设备自适应:

使用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的生命周期对照表

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.

这里是 脚注 的 内容.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: