架构Android App总结
历时两个多月,自己架构的一个App快要完成了,有很多可以总结的地方:
1, 各个模块尽可能独立,不要直接调用,用消息机制解耦。包括页面跳转不要直接startActivity,而是用消息跳转;业务模块请求网络、数据库、异步任务等都不要直接调用,而是用发消息请求,收消息获取响应。
2, 设计好消息框架,为第1条里说的提供基础。我用的是greenrobot/EventBus这个包,关于这个包的使用也有很多体会和总结,会再单独写一篇文章。
3,MVC设计,对一个页面来说,Activity是Controller,ViewHolder是View,Model看情况可有可无。
4,最好是最小单位的MVC,一个小的MVC整体再参与到另一个大的MVC中去,而不要MMMMM, VVVVV, CCCCC这样来布局。
5,设计HttpRequestMessage和HttpResponseMessage。App一般都是从网络请求数据,设计好发包和收包对象至关重要。在我的设计里,HttpRequestMessage做为消息被业务代码发出去,由专门负责网络请求的模块去监听然后处理,完成后再发一个对应的HttpResponseMessage消息出去,由感兴趣的业务代码去监听。关于这部分,会单独再写一篇文章。
6,定义好数据对象。一般来说,一个App中会多次用到相似的数据对象(很多字段相同),每次都在HttpResponseMessage中解析会造成很多重复代码,可维护性太差。所以最好是提前定义好数据对象,让数据对象自己解析自己的字段,这样很多业务模块都可以共用数据对象并且不用自己关心数据解析。还可以根据字段多少进行分层定义,比如一个数据,在列表中展示的字段必然不多,可定义为父类,点击列表的一个项目进入详情页的时候,之前的字段必然还需要,并且会新增很多字段,可以继承刚才的父类。
7,抽象BaseActivity,BaseFragmentActivity,BaseViewHolder,BaseFragment等。每个页面有很多工作都是重复的,一个一个写不仅费工夫,还造成重复代码太多,不好维护。并且,有了Base类,有很多打断性的事件处理可以直接由Base类给截断,具体业务类无需关心。
8,设计好MainTabActivity。MainTab一般要SingleTask,所以一定要重写onNewIntent方法。跳转到MainTab的时候一般也要clear top或者clear task。MainTab一般会承载多个Fragment,每个Fragment和MainTab的生命周期和切换事件一定要设计好,免得数据加载混乱,过多加载数据或者不加载。
9,设计好LoginActivity。先确定应用是强登录还是弱登录。对LoginActivity来说,强登录的逻辑比弱登录要简单。要提前想好这些事情:哪些页面可以或者需要跳转到LoginActivity;登录成功后是返回呢还是跳转到别的页。这些问题都牵涉到LoginActivity的设计,一般来说这个也得SingeTask和clear top。
10,设计健壮的Activity。比如每个Activity都写好onSaveInstance,在onCreate中要先判Bundle为空再用Intent初始化参数,不然就用Bundle初始化参数。还有很多良好的习惯,让Activity无懈可击。当然也可以由BaseActivity强制业务Activity去做这些事情。
11,下拉刷新,上拉加载更多的ListView。因为手机应用的数据很多都是一个List。有List的页面,要设计好分页加载,下拉刷新,上拉加载更多这些逻辑。这些可以封装成一个共用的类。一般对于一个含有list的页面来说,我会包含以下几个类:
A, Activity,页面Activity;
B, ViewHolder,页面的View holder;
C, Adapter,页面的List的Adapter;
D, ItemViewHolder,页面的List的一个Item的ViewHolder。
12, 设计好适配。安卓的适配有多个维度。从版本到屏幕尺寸等。要先定好自己的目标,dimens和drawable的适配规则要跟UI设计人员沟通好。
13,resource的使用不要太随意,不要随意添加颜色,不要随意添加字体大小,不要随意添加间距等。这些随意最后会造成整个应用的代码脏乱差。能公用的一定要抽取成共用的,这样不仅代码好维护,也让整个应用的不同页面都有一致的用户体验。
14,及时重构,架构应用免不了有些地方设计得不合理,发现这样的问题要及时重构,不要在一个不合理的框架上试图写合理的代码。
架构Android App总结的更多相关文章
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- [转]Android App整体架构设计的思考
1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...
- Android App的架构设计:从VM、MVC、MVP到MVVM
随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...
- Android app中的so库和CPU架构
一.android目前有几种cpu架构? 早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MI ...
- Android APP架构设计——MVP的使用示例
0. 前言 为了更好地进行移动端架构设计,我们最常用的就是MVC.MVP和MVVM,作为三个最耳熟能详的三大架构,应用可谓非常广泛.对于这三种架构设计以及优缺点已经在Android APP架构设计-- ...
- Android App 架构演变
文:https://www.jianshu.com/p/ce26e7960926 最近App项目(MVC架构)越做越大,协同开发效率较低,维护困难,所以产生了调整架构的想法,在 简书.csdn.知乎上 ...
- Android App的设计架构:MVC,MVP,MVVM与架构AAAAA
1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...
- Android APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- [转]设计一款Android App总结
开发工具的选择 开发工具我将选用Android Studio,它是Google官方指定的Android开发工具,目前是1.2.2稳定版,1.3的预览版也已经发布了.Android Studio的优点就 ...
随机推荐
- kali 2.0源更新
摘自网址: 修改更新源sources.list,提高软件下载安装速度(提供Kali 2.0 更新源) - 月黑风寒 - 博客园http://www.cnblogs.com/webyihui/p/485 ...
- VisualStudio.gitignore git 忽略
https://github.com/kaedei/gitignore/blob/master/VisualStudio.gitignore
- 【Delphi】GIF 动画建立
var Gif:TGifImage; begin //Setting the delay for each frame TGIFGraphicControlExtension.; TGIFGraphi ...
- Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy、
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- struts2基础篇(1)
一.Struts2简介Struts2以WebWork优秀的设计思想为核心,吸收了Struts1的部分优点,建立了一个基于WebWork和Struts1的MVC框架. 二.搭建Struts2开发环境2. ...
- java 的 AccessController.doPrivileged使用
AccessController.doPrivileged意思是这个是特别的,不用做权限检查. 在什么地方会用到呢:加入1.jar中有类可以读取一个文件,现在我们要使用1.jar去做这个事情.但是我们 ...
- spring的PathMatchingResourcePatternResolver-通配符的Resource查找器
PathMatchingResourcePatternResolver是一个通配符的Resource查找器,包括: /WEB-INF/*-context.xml com/mycompany/**/ap ...
- iOS钥匙串
钥匙串 苹果的"生态圈",钥匙串访问,使用 AES 256 加密算法,能够保证用户密码的安全 钥匙串访问SDK,是苹果在 iOS 7.0.3 版本以后公布的 钥匙串访问的接口是纯 ...
- NERD_commenter——VIM批量注释与反注释插件
转自:http://www.xefan.com/archives/83568.html 这是对程序员非常实用的一款插件,支持多种语言的补全,还支持单行注释,批量注释,等各种命令映射. 使用方法,先下载 ...
- 我常用的eclipse快捷键
重写父类方法:右键点击, 进source,进override/implement 单行注释(或多行注释) Ctrl+/ 文档注释:shift+alt+J 整块注释: Ctrl+shift+/ 取消整块 ...