本文共 5807 字,大约阅读时间需要 19 分钟。
一, 看个讨论:
你说这个我想了上次还被老大批了--过度设计了。过多考虑未来的需求和变动了就设计过度了,于是出现了就真是几十行的代码,写出各种类各种接口。
最近学到的倒是基于android特性进行开发,
ui上可以从需求分析到android控件的选择比如fragment,slidingmenu,actionbar,navigation drawer等。
整体架构上,数据库层和ui刷新,数据异步读取,使用contentprovider(数据库操作像rest api一样的风格),cursorloader,
网络请求的intentservice,resultreceiver,gson等。
设计思路上,分层--还是走的mvc嘛,虽然最近也有用mvp,不过不管怎么样关键还是要有分层的意识吧;
解耦--面向接口编程啊,依赖倒置都是;
抽象能力:其实我觉得抽象能力很重要的,不过自己现在抽象能力也很弱,没啥建议。
好的开源项目:我觉得倒是没什么统一框架,可以看看foursquare,google io app的源码都是相当好的,android源码永远是值得读的。
Android学习之路
别人整理的几个android开源框架
别人整理的一些Android项目
Android本身就是一个MVC框架,Java也是一个重量级的语言。
我觉得,不需要再加新的框架了,增加团队学习成本了。
你的精力应该花在拆解业务,分成若干个library,如何集成如何分工上面。
把代码耦合降低,能抽象的抽象,提高代码的复用能力。MVC模块各司其职,不要参杂无关的东西。其实最主要的就是对业务的熟悉吧,把要实现的功能进行合理划分抽象基本就可以写出不错的代码了
ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent的http模块,具有快速构建文件缓存功能,无需考虑缓存文件的格式,都可以非常轻松的实现缓存,它还基于文件缓存模块实现了图片缓存功能,在android中加载的图片的时候,对oom的问题,和对加载图片错位的问题都轻易解决。他还包括了一个手机开发中经常应用的实用工具类,
Android基本就是一个MVC框架了,你不需要再特别找其他所谓框架进行包装。我建议从component-oriented design入手,善用继承来写出customized widgets。说实话,你只要按照Android Online Documentation操作即可。。。
安卓开发也多年,从传统J2EE开发转过来,深知过度设计的危害。这些年一直追求把代码在最小架构下写的通俗易懂。只是说起来容易做起来难。其实做架构是什么?是把复杂系统高内聚低耦合的能力,往往是应付几十个人同时协同作战时能够有序稳定,相对有节奏。但话说回来,对于app层面的开发,2到3个能力差不多的人就能形成一个高效的整体,一款产品这个开发规模能应付大部分情况,过度复杂的架构设计越来越没法适应快速的移动产品演进,所以,尽量在基本mvc分层基础上把代码写的通俗易懂,适度重构。
KJFrameForAndroid框架,是一个android开发框架,非常好用,直接一行代码搞定一切,文档和demo也很齐全。最大的优势是这个框架是一直在维护的,不像其他的一些烂玩意,用上几天,一堆问题还没人维护。
android本身即是MVC了,所以我觉得可以发挥的地方是这三个模块的解耦和模块内的设计,比如怎么设计自定义的组件(builder模式等),组件能否与业务和呈现分离;能否用基类等方式设计抽象出比如activity生命周期回调,异步线程调用的共同的流程;用style和include等方法尽量让布局文件易于维护和复用。闭包等概念都能让你设计出更好的模型。这些东西在Android 源码和类似 efficient java中都能学到。我目前在做公司三个APP的合并,抽象出可以复用的业务逻辑和工具性的代码作为lib,也就是android studio里的module, 也是觉得要耗费一番精力。
二, 值得推荐的android开源框架
项目地址
项目地址:
文档介绍:
项目地址:
主要有四大模块:
FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法, 没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档), 更好的管理bitmap内存。
FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器, 在imageview显示图片的时候播放动画等(默认是渐变动画显示)。
项目地址:
主要有四大模块:
(1) 数据库模块:android中的orm框架,一行代码就可以进行增删改查;
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
(3) 网络模块:支持同步,异步方式的请求;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
(4) 图片缓存模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
项目地址:
主要有以下模块:
项目地址:
主要有以下模块:
其中的 volley扩展性非常好,个人比较喜欢的风格。其他如 android-async-http、Afinal 也相当不错。
项目地址:
主要有以下特点:
项目地址:
RoboGuice 使得进行Android开发更加方便,使得开发变得更加简单也更有乐趣。当你调用getIntent().getExtras()是不是经常检查是否为null?RoboGuice可以帮助你。想想调用findViewById()并映射到TextView确实有必要么?RoboGuice也可以帮你。
RoboGuice 可以帮助解决这类的判断工作。你再也不用记住,是通过调用bindService获取一个用户service,调用getSystemService获取一个系统service。注入你的view、service、或者其他对象,然后让RoboGuice来处理剩下的事宜。
RoboGuice 精简了你的应用代码。更少的代码意味着bug也会更少。也使得阅读代码更加容易,不在纠缠于Android平台的各种特性,而是关注于应用实际的业务逻辑。
没什么很难的,你所需要做的仅仅是配置RoboGuice。
项目地址
android的依赖注入框架(DI框架),感觉跟Spring 的IOC差不多吧。这个框架它的好处是它没有采用反射技术(Spring是用反射的),而是用预编译技术,因为基于反射的DI非常地耗用资源(空间,时间)
中文文档 项目地址
Fresco 是一个强大的图片加载组件。
Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。
Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。
特性:
项目地址:
ActiveAndroid是一个活跃的记录风格的ORM(对象关系映射)库。ActiveAndroid可以让您保存和检索的SQLite数据库记录而没有写一个SQL语句。每个数据库记录被整齐包裹成一个model类,像保存方法()和delete()。
项目地址:
Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。所以,如果你的程序里需要这个功能的话,那么不妨试试它。因为已经封装好了一些类和方法。我们 可以直接拿来用了。而不用重复去写了。其实,写一个这方面的程序还是比较麻烦的,要考虑多线程,缓存,内存溢出等很多方面。但是,你也可以参考这个例子来自己写出更好的程序。
转载地址:http://ottkb.baihongyu.com/