历时两个多月,自己架构的一个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总结的更多相关文章

  1. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  2. [转]Android App整体架构设计的思考

    1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...

  3. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

  4. Android app中的so库和CPU架构

    一.android目前有几种cpu架构? 早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MI ...

  5. Android APP架构设计——MVP的使用示例

    0. 前言 为了更好地进行移动端架构设计,我们最常用的就是MVC.MVP和MVVM,作为三个最耳熟能详的三大架构,应用可谓非常广泛.对于这三种架构设计以及优缺点已经在Android APP架构设计-- ...

  6. Android App 架构演变

    文:https://www.jianshu.com/p/ce26e7960926 最近App项目(MVC架构)越做越大,协同开发效率较低,维护困难,所以产生了调整架构的想法,在 简书.csdn.知乎上 ...

  7. Android App的设计架构:MVC,MVP,MVVM与架构AAAAA

    1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...

  8. Android APP性能分析方法及工具

    近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...

  9. [转]设计一款Android App总结

    开发工具的选择 开发工具我将选用Android Studio,它是Google官方指定的Android开发工具,目前是1.2.2稳定版,1.3的预览版也已经发布了.Android Studio的优点就 ...

随机推荐

  1. Java 组播

    MulticastSocketServer.java package cn.edu.buaa.multicast; import java.io.IOException; import java.ne ...

  2. Centos7.X 源码编译安装subversion svn1.8.x

    说明:SVN(subversion)的运行方式有两种:一种是基于Apache的http.https网页访问形式:还有一种是基于svnserve的独立服务器模式.SVN的数据存储方式也有两种:一种是在B ...

  3. PHP站内搜索、多关键字、加亮显示

    php搜索代码: 搜索以PHP100开头: SELECT * FROM teble WHERE title  LIKE  'PHP100%' 搜索以PHP100结束: SELECT * FROM te ...

  4. EF How to use context.Set and context.Entry, which ships with EF4.1 ?

    How to use context.Set and context.Entry, which ships with EF4.1 ? Hello, I am trying to implement a ...

  5. Orchard源码分析(6):Shell相关

    概述在Orchard中,提出子站点(Tenant)的概念,目的是为了增加站点密度,即一个应用程序域可以有多个子站点. Shell是子站点(Tenant)级的单例,换句话说Shell代表了子站点.对比来 ...

  6. [工具]Swagger-api接口文档描述

    摘要 工作中经常的用到webapi,之前都是提供的使用postman模拟请求的截图,非常的不方便,如果能在项目中集成一个在线查看接口说明的地方,肯定更方便更直观.在网上看到swagger这个组件,界面 ...

  7. 如何删除git远程分支

    1,在开发过程中,大家在远程创建了许多分支,有些是无用的,该如何删除呢,可以参考下面的方法. 如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master 分支(或任何其他存放 稳 ...

  8. python基础教程1

    python作为一种编程语言,诞生于1990年左右,算是一门比较年轻的语言(也算是90后吧),它是面向对象的,但不同于JAVA\C#那么严格要求一切皆对象,更接近于C++,是面向过程和面向对象的结合: ...

  9. jQuery 2.0发布,不再支持IE6/7/8

    有时发现jQuery库引用的都对,javascript代码写的也没问题,可是jquery就是出现问题,额--我发现换个jquery库就没问题了,长时间不关注jquery的问题而已: 很多人都没有使用最 ...

  10. 如何申请https证书、搭建https网站

    如何申请https证书.搭建https网站 随着国内搜索引擎巨头百度启用全站https加密服务,全国掀起了网站https加密浪潮.越来越多的站点希望通过部署https证书来解决“第三方”对用户隐私的嗅 ...