Skip to content
wanglei edited this page Dec 7, 2016 · 8 revisions

XDroid 轻量级的Android快速开发框架

概述

XDroid是一个轻量级的Android快速开发框架,由UICacheEventImageLoaderKitLogRouterNet等几个部分组成。其设计思想是使用接口对各模块解耦规范化,不强依赖某些明确的三方类库,使得三方类库可自由搭配组装,方便替换。可快速、自由的进行App开发。

特性

XDroid主要有这些特性:

  • 基于MVC,可快速切换到MVP
  • 提供XActivity、XFragment、SimpleRecAdapter、SimpleListAdapter等基类,可快速进行开发
  • 完整封装XRecyclerView,可实现绝大部分需求
  • QTContentLayout、XRecyclerContentLayout实现loading、error、empty、content四种状态的自由切换
  • 实现了Memory、Disk、SharedPreferences三种方式的缓存,可自由扩展
  • 内置了EventBus,可自由切换到其他事件订阅库
  • 内置Glide,可自由切换其他图片加载库
  • 可输出漂亮的Log,支持Json、Xml、Throwable等,实现蝇量级
  • 内置链式路由
  • 内置常用工具类:package、random、file...,提供的都是非常常用的方法
  • 内置加密工具类 XCodec,你想要的加密姿势都有
  • 默认使用okhttputils作为api请求,可任性切换retrofit等其他库
  • 引入三方库极少

Get Started

使用,仅需三步:

step1

clone 'XDroid'库到本地:

git clone https://github.com/limedroid/XDroid.git

step2

将library作为依赖库,在您的app module 中 添加如下依赖:

compile project(':library')

step3

修改kit包下的XDroidConf配置类,主要针对log、cache、router。若采用默认配置,此步骤可略过.

1 使用说明

1.1 UI规范

在UI层,主要对Activity、Fragment、RecyclerView、ListAdapter进行了封装。

1.1.1 XActivity

项目的Activity可直接继承XActivity,也可重新写一个基类Activity并让其继承XActivity,子类Activity必须实现这四个方法:

    void initData(Bundle savedInstanceState);       //初始化数据

    void setListener();                 //设置事件监听
        
    int getLayoutId();                  //设置布局资源文件id

    boolean useEventBus();              //是否使用eventbus

这些类的定义在UiCallback接口中,若要进行修改,可直接修改此类。 XActivity中还实现了UiDelegate,实现常用的公共方法,在子类中可直接使用。

可以将项目的showLoadingDialog()等常用方法添加进去,方便子类调用

1.1.2 XFragment

XFragment的实现与XActivity一致,为了方便的对Fragment和Activity进行切换,也就是只需要修改继承父类,就可改变Fragment&Activity的归属。其使用方法与XActivity是一致的。

1.1.3 UiDelegate

UiDelegate是一个接口,封装了一些常见的公共方法,供XActivityXFragment的子类使用,其定义如下:

public interface UiDelegate {

    void resume();
    void pause();
    void destory();

    void visible(boolean flag, View view);
    void gone(boolean flag, View view);
    void inVisible(View view);

    void toastShort(String msg);
    void toastLong(String msg);

}

XDroid中内置了UiDelegateBase实现类。

1.1.4 XRecyclerView

XDroid集成了XRecyclerViewXRecyclerView有该库的详细说明。这里列举说明如下:

  • XRecyclerView继承自RecyclerView,它就是一个封装了常见功能的RecyclerView,而不是继承FrameLayout
  • XRecyclerView中实现了Header、Footer,header和Footer可以有多个
  • XRecyclerView的每一个header、footer的viewType是不同的,而大部分开源库的header、footer的viewtype是相同的,其直接后果是界面卡顿
  • XRecyclerView可以做出几乎任何的界面效果,可以取代ScrollView,你只需要使用header或者footer
  • XRecyclerView中实现了上拉加载更多,可以自定义加载更多的效果,只需要实现LoadMoreUIHandler接口即可
  • XRecyclerView并未实现下拉刷新功能,您可以选择SwipeRefreshLayout或者其他的下拉刷新viewGroup包裹,即 你可以自由选择下拉刷新功能的实现。
  • 为了方便自定义使用,特别集成了XRecyclerContentLayout控件,你可以根据业务进行扩展,XRecyclerContentLayout只是一个示例,当然也可以满足绝大部分需求了

1.1.5 SimpleRecAdapter&SimpleListAdapter

SimpleRecAdapter是针对单ItemType场景对RecyclerView.Adapter的封装,只需要继承该类,实现三个方法即可:

F newViewHolder(View itemView);         //创建viewholder

int getLayoutId();              //设置布局资源id

void onBindViewHolder(F holder, int position);       //绑定数据和事件

若有多个ItemType,请继承RecyclerAdapter类,具体实现推荐看源码

SimpleListAdapter是针对单ItemType场景对ListAdapter的封装,继承该类,也需要实现三个方法:

H newViewHolder(View convertView);      //创建viewholder

int getLayoutId();          //设置布局资源文件

void convert(H holder, T item, int position);       //绑定数据和事件

若有多个ItemType,请继承XListAdapter类

1.2 缓存

XDroid定义了ICache接口

public interface ICache {
    void put(String key, Object value);         //存

    Object get(String key);                     //取

    void remove(String key);                    //删除

    boolean contains(String key);               //检验是否存在

    void clear();                               //删除所有

}

并实现了DiskCacheMemoryCache,其内部分别借助 DiskLruCacheLruCache实现。

1.2.1 SharedPreferences

SharedPref是对SharedPreferences的封装,包含了一系列的get&put方法、remove等。 推荐实践:创建一个新类,将键名作为常量,并封装对应的put&get静态方法,方便全局使用。如:

public String getUserName(){
    return getString(KEY.USER_NAME , null);
}

可以在XDroidConf中配置缓存文件名称,默认是config

1.2.2 MemoryCache

MemoryCache内部采用LruCache实现,是ICache的实现类。 推荐实践:创建一个新类,将键名作为常量,并封装对应的put&get静态方法,方便全局使用。

1.2.3 DiskCache

DiskCache内部采用DiskLruCache实现,是文件缓存方式,其在基本缓存的基础上,增加了有效期,可以用于Api数据缓存。

void put(String key, String value);
void put(String key, String value, long expireMills);
String get(String key);
void remove(String key);
boolean contains(String key);
void clear();

实现了上述方法。

可以在XDroidConf中配置缓存目录名称,默认是cache

1.2.4 自定义缓存

自定义缓存只需要实现ICache即可。

1.3 事件订阅

事件订阅,对应包event

使用事件订阅,需要重写XActivity或者XFragmentuseEventBus方法,当返回true时,表示使用事件订阅。

@Override
public boolean useEventBus() {
    return false;
}

1.3.1 EventBus的使用

XDroid中内置实现了EventBus,使用时只需要调用

BusFactory.getBus().register(this);

XActivity&XFragment已经有默认实现,无需额外调用。

EventBus使用最新的3.0,去了解详情EventBus

需要说明的是: 事件类需要实现IEvent接口

事件发送:

BusFactory.getBus().register(new MsgEvent());

MsgEvent implement IEvent

1.3.2 自定义事件订阅

自定义事件订阅只需要两步:

step1

实现IBus接口,并实现其四个方法:

    @Override
    public void register(Object object) {
        
    }

    @Override
    public void unregister(Object object) {

    }

    @Override
    public void post(IEvent event) {

    }

    @Override
    public void postSticky(IEvent event) {

    }
step2

修改BusFactory类的实现,将EventBusImpl的实现方案替换成您自己的事件订阅方案。

 public static IBus getBus() {
        if (bus == null) {
            synchronized (ILFactory.class) {
                if (bus == null) {
                    bus = new EventBusImpl();
                }
            }
        }
        return bus;
    }

1.4 图片加载

图片加载对应包imageloader

XDroid内置了glide作为图片加载工具

1.4.1 Glide的使用

glide的使用只需要调用:

ILFactory.getLoader().loadAssets(imageView,"",new ILoader.Options(loadingResId,errorResId));

其他方法可以查看源码.

1.4.2 图片加载扩展

自定义图片加载只需两步,不需要修改之前的调用代码。

ILoader介绍

ILoader是一个接口,定义如下:

public interface ILoader {

    void init(Context context);     //图片加载框架初始化,通常在App->onCreate方法中调用

    void loadNet(ImageView target, String url, Options options);        //加载网络资源
    void loadResource(ImageView target, int resId, Options options);    //加载resource
    void loadAssets(ImageView target, String assetName, Options options);   //加载asset
    void loadFile(ImageView target, File file, Options options);        //加载file

    void clearMemoryCache(Context context);         //clear内存缓存

    void clearDiskCache(Context context);           //clear磁盘缓存
}

如果项目还有其他需求,可直接在这里进行扩展。

step1

新建一个图片加载控制器,并实现ILoader接口及其对应的几个方法。

step2

ILFactory中修改getLoader的实现,替换成新的图片加载控制器

 public static ILoader getLoader() {
      if (loader == null) {
          synchronized (ILFactory.class) {
              if (loader == null) {
                  loader = new GlideLoader();
              }
          }
      }
      return loader;
}

不需要修改imageloader的调用

1.5 常用工具

1.5.1 加解密Codec

1.5.2 常用工具kits

1.5.3 单例基类SingletonCtx

1.5.4 简单回调SimpleCallback

1.6 日志

1.7 路由

1.8 Api请求

1.9 XDroid配置

1.10 混淆