架构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的优点就 ...
随机推荐
- Runner站立会议07
开会时间:21.10~21.30 地点:基教负一 今天做了什么:看网上下载的日历代码 明天准备做什么:继续看代码 遇到的困难:下载的代码有很多看不懂的地方,很多包.函数等都不知道 会议图: 燃尽图:
- Android学习笔记——TableLayout
该工程的功能是实现在一个activity中显示一个表格 以下代码是MainActivity.java中的代码 package com.example.tablelayout; import andro ...
- 一段发工资的shell代码
人事发工资条之前是一个个截图发到我们的邮箱里,看人事妹纸是一个善良而又美丽的姑凉,于是乎写了一段shell代码实现批量发短信至各个手机号.不多说了,上代码,其实很简单,我都不好意思上传,还是记录下吧, ...
- Unity multi_compile
http://docs.unity3d.com/Manual/SL-MultipleProgramVariants.html http://forum.unity3d.com/threads/tuto ...
- Java常见的几种内存溢出及解决方法
Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...
- Mac常用命令
~ 当前所在目录# 超级用户提示符$ 普通用户提示符 Alfred2 //呼出 option + space rm -rf //删除文件夹pwd //打印当前目录 print working dire ...
- eclipse-4.4.2安装Groovy插件(其他版本eclipse可参考)
步骤 : 1.启动eclipse,点击help -> Install New Software... 在弹出的窗口中点击:Add... Groovy插件的地址:http://dist.sprin ...
- 【转】Kafka实战-Flume到Kafka
Kafka实战-Flume到Kafka Kafka 2015-07-03 08:46:24 发布 您的评价: 0.0 收藏 2收藏 1.概述 前面给大家介绍了整个Kafka ...
- C#数字格式化
格式规范的完整形式:{index [,width][:formatstring]} index是此格式程序引用的格式字符串之后的参数,从零开始计数:width(可选) 是要设置格式的字段的宽度,wid ...
- Nginx中的rewrite指令
转自:http://www.76ku.cn/articles/archives/317 rewite.在server块下,会优先执行rewrite部分,然后才会去匹配location块server中的 ...