Skip to content

SwordSware/AisenForAndroid

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 

Repository files navigation

AisenForAndroid - 重构中


Aisen一个免费开源、面向AOP、遵循Apache2开源协议发布的Android轻量级快速开发框架。初衷是将面向互联网应用开发过程中大部分重复工作抽象出来,基于反射注入的方式实现具体业务逻辑,让开发人员更专注于项目的业务或者UI特效,不需要关注架构方面的SDK业务接口封装、网络协议、缓存管理之间的耦合关联,以及UI层面常见刷新控件、分页加载、图片OOM、Adapter优化等最常见的UI工作;

Aisen微博是个人实验性项目,依赖AisenForAndroid开发,UI遵循Material Design,也会在部分功能实现上依赖Github上其他优秀的开源组件或者框架,作为范例让感兴趣的同志更加了解AisenForAndroid或者其他项目的使用。

流程图

UI层

概要说明

1、处理4种基本视图之间的自动切换; 2、统一ListView、GridView、ViewPager等列表容器的刷新逻辑; 3、处理分页加载线程的业务逻辑;

1、ABaseFragment

维护一个主业务线程,通过线程状态的回调,自动维护四种基本视图Loading、Empty、Failure、Content之间的动态切换。

流程图

效果图

2、APagingFragment

2.2.1概要说明 继承ABaseView,扩展Adapter支持,通过子类分页器配置,维护一个分页线程,自动根据刷新状态、分页等参数调度线程刷新服务端的业务数据,将数据自动append到adapter的数据池中刷新列表;支持ListView、GridView、ViewPager等控件的扩展。支持各种上下拉控件的扩展。 在Android端,基本所有的列表容器:ListView、GridView、ViewPager等,都是通过适配器BaseAdapter来操作数据,所以APagingView的工作就是维护好一个Adapter,剥离一个分页接口切面,通过分页器的配置,根据用户上拉、下拉的操作,自动的将分页参数传递给子类,让子类自行调度SDK方法完成数据的拉取,获取到数据后,根据刷新模式自动的完成列表页面刷新。即下拉刷新将数据拼接在adapter数据头部,上拉刷新将数据拼接在adapter数据尾部,reset刷新将数据重置adapter。以上所有的操作自动调度,子类只需要实现已经重用了的ItemView(你理解的ViewHolder),基本一个列表界面3-4个方法搞定。

效果图

  • ABaseFragment
  • ARefreshFragment
    • ASwipeRefreshListFragment
    • AListFragment
  • AStripTabsFragment
    • AAutoReleaseStripTabsFragment

SDK接口层

将分页、缓存、线程等都归纳在这里

  • ABizLogic
  • Cache
  • Paging
    • PageIndexPaging
  • WorkTask
    • TaskException

网络协议层

  • IHttpUtility
    • HttpConfig
    • Params

开发组件

  • BitmapLoader
  • SqliteUtility

使用

1、依赖关系

我只能用这两句话描述了

AisenForAndroid依赖android-support-v7-appcompat
AisenSample依赖AisenForAndroid

2、继承GlobalContext

你的项目Application必须继承自GlobalContext

老的内容,稍后删

UI层

定义Loading、Failure、Empty、Empty、Content5个基本视图。根据异步线程执行的业务方法状态,自动的维护这5个视图之间的状态切换。 效果

解决互联网应用过程中常见的问题,例如:

  • UI层,定义、管理基本视图的状态切换,封装列表视图的状态控制;
  • SDK层,申明客户端所有接口方法,定义入参和出参以及业务异常;
  • Cache层,定义缓存接口,自由配置每个接口的缓存方式;
  • Network层,定义网络接口,
  • 图片加载框架,一行代码完成图片的加载绑定,优化OOM、错位、压缩、网络开销等问题;
  • Sqlite的ORM操作组件,基于GreenDAO框架,面向对象的一行代码CRUD操作;
  • IOC注解,UI组件的绑定,一般性事件设置;

我能做什么

  • 使用ViewInject绑定view
  • fragment可以
  • activity可以
  • adapter的itemview可以
  • 任何地方
  • BitmapLoader,一行代码加载图片
  • 可以加载web、sdcard、assets、drawable、contentprovider、任何地方
  • 可以裁剪图片、圆角、压缩、任意处理
  • 二级缓存
  • 下载进度回调,开始、错误、进度、结束等事件
  • 其他配置:Displayer、LRU算法
  • ORM
  • 一行代码针对object的sqlite增删改查操作
  • 业务接口规范:BizLogic
  • 看这里SinaSDK,再看这里OSCSdk
  • 网络通讯协议规范:HttpUtlitiy
  • http、https
  • soap
  • socket
  • 接口缓存管理
  • 将接口数据保存为文件
  • 将接口数据保存到db
  • 将接口数据保存到任何你想保存的地方
  • 异步线程:WorkTask

我还能做什么

  • Loading视图、Failure视图、Empty视图、Empty视图、Content视图这5中基本视图的切换管理,你什么java代码都不需要写,只需要在layout的xml文件中按照自己的需求绘制5种视图的ui部分,就能
  • 加载数据时显示Loading界面
  • 加载失败显示Failure界面,将faild的提示信息绑定到ui显示,如果有ReloadBtn点击自动刷新
  • 加载空数据显示Empty界面,将empty的提示信息绑定到ui显示,如果有ReloadBtn点击自动刷新
  • 加载成功后显示Content界面
  • 只需实现3个方法,你就做完了一个刷新列表界面(支持三种刷新控件:示例一、示例二、示例三)。它有这些功能:
  • 支持ListView、GridView
  • 上拉刷新、自动加载更多
  • 接口分页加载
  • 自动保存、刷新缓存数据
  • 缓存数据时效过期自动刷新列表
  • 保存阅读位置
  • 资源重用
  • app运行时切换网络通讯协议
  • 某些项目,根据网络环境切换网络通讯协议,网段内实现p2p的wifi socket协议通讯,网段外与云服务器的http+soap+https协议通讯,或者与硬件交互的bluetooth socket协议通讯等。不管什么协议之间的切换,只需要一行代码动态配置即可
  • 事件传递机制
  • 没有任何耦合,任何异常信息以Exception的形式上报至UI层。UI层只处理异常信息的UI反馈,业务接口层上报业务异常信息(登录失败、表单错误等业务相关),网络通讯层上报通讯异常信息(无网络、连接超时等)
  • 4层结构,层与层之间低耦合,恪守单一职责原则,面向AOP
  • UI层,处理ui上的特效、事件、基本的业务逻辑处理
  • SDK层(业务接口层),规范所有与服务端通讯的接口定义,包括定义方法的入参、出参、异常
  • HttpUtility层(网络通讯层),实现app所支持的网络通讯协议
  • CacheUtility层(持久层),针对业务接口的数据持久管理

ORM(SqliteUtility)

假设你已经熟悉sqlite操作,那么,SqliteUtility的相关api方法就不需要再说太多。同样面向对象,一行代码对数据库进行增删改查操作,但是剔除了一对一或者一对多这些操作,更多的示例代码请查看SqliteUtility

IOC(ViewInject)

继承BaseActivity、ABaseFragment等均可以使用ViewInject对属性自动装配,可以给view设置点击事件,像这样

@ViewInject(idStr = "layoutLoadFailed", click = "reload")
View loadFailureLayout;// 加载失败视图

或者像ItemView,也可以自动绑定,像这样

public class TimelineItemView extends AbstractItemView<StatusContent> 
											implements OnClickListener {
	@ViewInject(id = R.id.imgPhoto)
	ImageView imgPhoto;
	@ViewInject(id = R.id.txtName)
	TextView txtName;
  ...
}

目前只支持click事件,我是个很实在的人,确实还没有遇到其他例如OnLongClick事件需要绑定就没有添加支持。

BitmapLoader

请使用这一行代码加载图片

BitmapLoader.display(BitmapOwner owner, String url, ImageView imageView, ImageConfig ImageConfig)

更多详细请查看BitmapLoader

依赖工程

License

Copyright (c) 2014 Jeff Wang

Licensed under the Apache License, Version 3.0

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%