搭建一个App框架及相应的源码分析(EventBus+RxJava+Rxtrofit+OkHttp+Dagger2)及三方SDK等

来源:互联网 发布:聊天软件遇见 编辑:程序博客网 时间:2024/05/20 05:45

在Android App中,哪些是我们需要的横切关注点?个人认为主要包括以下几个方面:Http, SharedPreferences, Json, Xml, File, Device, System, Log, 格式转换等。
Android App整体架构设计的思考(1,2)- http://blog.csdn.net/luyi325xyz/article/details/43085409    http://www.zhihu.com/question/27645587/answer/37579829  http://blog.csdn.net/luyi325xyz/article/details/43482123


> 崩溃统计分析

Fabric 是一个先进的移动平台平台。 Crashlytics 是Fabric提供的一个崩溃统计分析平台,允许你监控你的应用的状态。

> 监控 推送 


Android使用Fragment打造万能页面切换框架-http://blog.csdn.net/sbsujjbcy/article/details/47060211

  支付宝支付--App支付DEMO&SDK:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1
  友盟统计: http://dev.umeng.com/analytics/android-doc/integration
  Android集成微信支付功能-- http://www.jianshu.com/p/22659205eb8b
  单点登录的cookies Session,Token

----------------------------------

Android EventBus实战 没听过你就out了-- http://blog.csdn.net/lmj623565791/article/details/40794879

Android EventBus源码解析 带你深入理解EventBus-- http://blog.csdn.net/lmj623565791/article/details/40920453

Google相关MVP架构的工程代码:https://github.com/googlesamples/android-architecture


> ORM对象关系映射之使用GreenDAO进行CRUD操作-http://blog.csdn.net/u010687392/article/details/48444417

https://github.com/youxin11544/mvp_hybride_framwork (这是一个Android MVP模型良好的架构设计,同时也做了Android和HTML 5交互架构,用到了RxJava+Retrofit+MVP+泛型缩减mvp+模板模式+命令模式+观察者模式+管理者模式 +简单工厂模式。。

  EventBus定义:是一个发布 / 订阅的事件总线。这么说应该包含4个成分:发布者,订阅者,事件,总线。
  RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。


ButterKnife+RxJava+Rxtrofit+OkHttp+Dagger2+aFinal
网络框架:okhttp、volley、android-async-http
图片框架:Picasso、Fresco、Glide、Android-Universal-Image-Loader
缓存框架:DiskLruCache、 RobospiceJson
解析:Gson、Jackson、Fastjson
事件总线:EventBus、Otto
ORM框架:GreenDAO

RxJava
 1.Observable和Subscriber可以做任何事情
Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。
 2.Observable和Subscriber是独立于中间的变换过程的。
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。
---------------------
EventBus的作用是发布/订阅事件总线,因为项目中用到RxJava、RxAndroid,所以完全可以使用RxJava、RxAndroid来实现EventBus。
---------------------
Rx是响应式编程的意思, 本质是观察者模式, 是以观察者(Observer)和订阅者(Subscriber)为基础的异步响应方式. 在Android编程时, 经常会使用后台线程, 那么就可以使用这种方式. 
--------------------
OkHttp
 使用OkHttp而不再使用HttpURLConnection或者是HttpClient,使用OkHttp之前,需要先下载OkHttp.jar包,大家可以在https://github.com/square/okhttp去下载OkHttp的最新jar包以及源码,
 同时因为OkHttp内部依赖okio,所以大家还要自行下载okio.jar包,下载地址在这里https://github.com/square/okio
1.一般的get同步阻塞请求和异步请求
2.一般的post同步阻塞请求和异步请求
3.实现了文件上传功能(包含文件上传进度回调显示)
4.实现了大文件下载功能,只需要指定文件下载路径即可,也包含了下载进度的回调显示
5.实现了请求结果的自动解析,用户也可以根据需求扩展自定义结果解析类
6.对所有请求都支持直接将结果解析转换为JavaBean对象或集合
7.支持对返回结果结构的自定义,例如设置返回结果结构为:{flag:1|0,error:错误信息,result:请求结果},结果解析的时候会按照此结构进行结果解析
----------------------
Retrofit
 Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton。
--------------------
bufferknife
 是注解中相对简单易懂的很不错的开源框架
-----------------
Dragger2 依赖注入框架,注解
 Dragger2解决问题的基本思想是:利用生成和写的代码混合达到看似所有的产生和提供依赖的代码都是手写的样子。

-----------------------------

Android 开源库 集锦-- http://geek.csdn.net/news/detail/113690

> 搭建App框架可引用的开源包:

http://www.techug.com/15-android-framework?ref=myread
http://www.kuqin.com/shuoit/20160509/351926.html

1. 缓存

  • DiskLruCache    Java实现基于LRU的磁盘缓存

2.图片加载

  • Android Universal Image Loader  一个强大的加载,缓存,展示图片的库
  • Picasso 一个强大的图片下载与缓存的库
  • Fresco  一个用于管理图像和他们使用的内存的库
  • Glide   一个图片加载和缓存的库   
  • imageLoader  

3. 图片处理

  • Picasso-transformations 一个为Picasso提供多种图片变换的库
  • Glide-transformations   一个为Glide提供多种图片变换的库
  • Android-gpuimage    基于OpenGL的Android过滤器

4. 网络请求

  • Android Async HTTP  Android异步HTTP库
  • AndroidAsync    异步Socket,HTTP(客户端+服务器),WebSocket,和socket.io库。基于NIO而不是线程。
  • OkHttp  一个Http与Http/2的客户端
  • Retrofit    类型安全的Http客户端
  • Volley  Google推出的Android异步网络请求框架和图片加载框架

5. 网络解析

  • Gson    一个Java序列化/反序列化库,可以将JSON和java对象互相转换
  • Jackson Jackson可以轻松地将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象
  • Fastjson    Java上一个快速的JSON解析器/生成器
  • HtmlPaser   一种用来解析单个独立html或嵌套html的方式
  • Jsoup   一个以最好的DOM,CSS和jQuery解析html的库

6. 数据库

  • OrmLite JDBC和Android的轻量级ORM java包
  • Sugar   用超级简单的方法处理Android数据库
  • GreenDAO    一种轻快地将对象映射到SQLite数据库的ORM解决方案
  • ActiveAndroid   以活动记录方式为Android SQLite提供持久化
  • SQLBrite    SQLiteOpenHelper 和ContentResolver的轻量级包装
  • Realm   移动数据库:一个SQLite和ORM的替换品

7. 依赖注入

  • ButterKnife 将Android视图和回调方法绑定到字段和方法上
  • Dagger2 一个Android和java快速依赖注射器。
  • AndroidAnotations   快速安卓开发。易于维护
  • RoboGuice   Android平台的Google Guice

8. 图表

  • WilliamChart    创建图表的Android库
  • HelloCharts 兼容到API8的Android图表库
  • MPAndroidChart  一个强大的Android图表视图/图形库

9. 后台处理

  • Tape    一个轻快的,事务性的,基于文件的FIFO的库
  • Android Priority Job Queue  一个专门为Android轻松调度任务的工作队列

10. 事件总线

  • EventBus    安卓优化的事件总线,简化了活动、片段、线程、服务等的通信
  • Otto    一个基于Guava的增强的事件总线

11. 响应式编程

  • RxJava  JVM上的响应式扩展
  • RxJavaJoins 为RxJava提供Joins操作
  • RxAndroid   Android上的响应式扩展,在RxJava基础上添加了Android线程调度
  • RxBinding   提供用RxJava绑定Android UI的API
  • Agera   Android上的响应式编程

12. Log框架

  • Logger  简单,漂亮,强大的Android日志工具
  • Hugo    在调试版本上注解的触发方法进行日志记录
  • Timber  一个小的,可扩展的日志工具

13. 测试框架

  • Mockito Java编写的Mocking单元测试框架
  • Robotium    Android UI 测试
  • Robolectric Android单元测试框架

Android自带很多测试工具:JUnit,Monkeyrunner,UiAutomator,Espresso等

14. 调试框架

  • Stetho  调试Android应用的桥梁,使得可以利用Chrome开发者工具进行调试

15. 性能优化

  • LeakCanary  内存泄漏检测工具
  • ACRA  Android应用程序崩溃报告
-------------------
  构建 Android 应用程序一定要绕过的 30 个坑-https://github.com/xitu/gold-miner/blob/master/TODO/building-android-apps-30-things-that-experience-made-me-learn-the-hard-way.md
  android经常用的orm框架主要有greenDAO、OrmLite、AndrORM。 综合了网上的各种评价,greenDAO的运行效率最高,内存消耗最少,性能最佳。因此决定采用greenDAO框架,对项目的orm框架进行改进。

Picasso框架:获取并显示远程图片,强大的图片下载和缓存的第三方库。
Picasso的基本用法:Picasso.with(context).load(imageUrl).into(imageView);
剪裁大小:Picasso.with(context).load(imageUrl).resize(50,50).centerCrop().into(imageView);
占位符图片:
Picasso.with(context).load(imageUrl).placeholder(R.drawable.image_placeholder).error(R.drawable.image_error_placeholder);
载入本地资源:Picasso.with(context).load(R.drawable.icon).into(imageView);
                     Picasso.with(context).load("file:///android_asset/Adnroid.png").into(imageView);
                     Picasso.wiht(context).load(new File(...)).into(imageView);
 调试:为了方便调试,可以通过调用Picasso的setIndicatiorEnabled(true);可以让不同来源的图片显示一个不同的色彩标记.


解决问题:
            自动将图像缓存在本地。
            通过图片压缩转换以减少内存消耗。
            自动处理了ImageView的回收,即自动取消不在视野范围内的ImageView视图资源的加载。
            在适配器中自动发现和重用以前取消的下载。
            图像格式转换:很多时候需要将图片进行格式转换或者剪裁以节省内存或者达到我们的布局效果。
            占位符图片:当图片未正常显示时默认的图片,通过placeholder()设置,Picasso也支持设置图片显示错误时显示的默认图片,通过error()设置。


设置图片圆角:
步骤1:
public class CircleTransform implements Transformation {
        @Override
        public Bitmap transform(Bitmap source) {
            int size = Math.min(source.getWidth(), source.getHeight());


            int x = (source.getWidth() - size) / 2;
            int y = (source.getHeight() - size) / 2;


            Bitmap squaredBitmap = Bitmap
                    .createBitmap(source, x, y, size, size);
            if (squaredBitmap != source) {
                source.recycle();
            }


            Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());


            Canvas canvas = new Canvas(bitmap);
            Paint paint = new Paint();
            BitmapShader shader = new BitmapShader(squaredBitmap,
                    BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
            paint.setShader(shader);
            paint.setAntiAlias(true);


            float r = size / 2f;
            canvas.drawCircle(r, r, r, paint);


            squaredBitmap.recycle();
            return bitmap;
        }


        @Override
        public String key() {
            return "circle";
        }
    }
步骤2:
Picasso.with(this).load(R.drawable.meinv2).transform(new CircleTransform()).into(img);

--------------
> Gson解析问题:
Gson解析null替换为空字符串- http://blog.csdn.net/tmacsky/article/details/50497521
                                                       http://stackoverflow.com/questions/9483348/gson-treat-null-as-empty-string/24252578#24252578
android代码混淆之Gson解析为null- http://blog.csdn.net/u011275767/article/details/46501037

0 0
原创粉丝点击