Android项目架构搭建

原地址:http://blog.csdn.net/dfskhgalshgkajghljgh/article/details/51646250
1. 前言

安卓属于小团队开发,架构的重要性在很多公司其实不是那么的明显,加上现在的开源框架层出不穷,更好的帮助我们上手Android项目的开发。我前两年也在公司主导过项目开发,搭建过不少项目,以前主要的倾向是MVC,导致了activity/fragment过大,而且很多公共功能杂乱在项目中,后期维护起来不方便,最近刚好有时间,重新搭建了一个新的框架。(ps:有建议或者更好想法的可以留言。)
2. 用到的知识点:

UI—-面向对象
数据交互—-MVP模式
数据库——GreenDao
网络图片加载—–picasso
json解析—–gson
http请求—-OKHttp
事件总线—-eventbus

以上知识点不熟悉的,可以先熟悉下基本知识,如果已经了解过,可以直接跳过下面的链接,直接看下文的使用。
MVP模式 讲解地址:http://blog.csdn.net/dfskhgalshgkajghljgh/article/details/51317956
GreenDao 讲解地址:http://blog.csdn.net/dfskhgalshgkajghljgh/article/details/51304390
picasso 讲解地址:http://blog.csdn.net/dfskhgalshgkajghljgh/article/details/51684693
OKHttp 讲解地址:鸿神的博客讲解地址:
http://blog.csdn.net/lmj623565791/article/details/47911083
eventbus 讲解地址:http://blog.csdn.net/dfskhgalshgkajghljgh/article/details/51681705
3. 框架整体结构:

这里写图片描述
4.项目目录结构:

这里写图片描述

bean—————————————————存放Java model对象
biz—————————————————–业务模块,根据不能业务建立子模块
bridge————————————————-底层功能实现跟UI层的衔接层
capabilities——————————————–底层功能具体实现(后期项目迭代到一定程度稳定后会考虑以jar形式导入)
constant———————————————–常量
ui——————————————————界面,根据不同业务建立子模块
util—————————————————–业务层公共方法
view—————————————————自定义view实现
5.具体解析

还是按照大家的习惯思维,从界面—>数据—->网络—–>交互,这样的层次讲解。

1)UI层

UI层其实比较简单,主要就是用到面向对象的封装,BaseActivity为基类,同时BaseActivity实现三个接口,分别为CreateInit, PublishActivityCallBack, PresentationLayerFunc,这三个接口的作用依次是:界面初始化,页面跳转封装,页面交互封装。PresentationLayerFunc的具体实现是在PresentationLayerFuncHelper里面,BaseActivity类会初始化该类,把复杂的功能实现抽象出去,轻量化基类。

这里写图片描述

BaseActivity代码如下所示:

/**
* <基础activity>
*
* @author caoyinfei
* @version [版本号, 2014-3-24]
* @see [相关类/方法]
* @since [V1]
*/
public abstract class BaseActivity extends Activity implements CreateInit, PublishActivityCallBack, PresentationLayerFunc, IMvpView, OnClickListener {

private PresentationLayerFuncHelper presentationLayerFuncHelper;

/**
 * 返回按钮
 */
private LinearLayout back;

/**
 * 标题,右边字符
 */
protected TextView title, right;

public BasePresenter presenter;

public final String TAG = this.getClass().getSimpleName();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    presentationLayerFuncHelper = new PresentationLayerFuncHelper(this);

    initViews();
    initListeners();
    initData();
    setHeader();
    EBApplication.ebApplication.addActivity(this);
    EventBus.getDefault().register(this);
}

@Override
public void setHeader() {
    back = (LinearLayout) findViewById(R.id.ll_back);
    title = (TextView) findViewById(R.id.tv_title);
    right = (TextView) findViewById(R.id.tv_right);
    back.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.ll_back:
            finish();
            break;
    }
}

public void onEventMainThread(Event event) {

}

@Override
protected void onResume() {
    EBApplication.ebApplication.currentActivityName = this.getClass().getName();
    super.onResume();
}

@Override
public void startActivity(Class<?> openClass, Bundle bundle) {
    Intent intent = new Intent(this, openClass);
    if (null != bundle)
        intent.putExtras(bundle);
    startActivity(intent);
}

@Override
public void openActivityForResult(Class<?> openClass, int requestCode, Bundle bundle) {
    Intent intent = new Intent(this, openClass);
    if (null != bundle)
        intent.putExtras(bundle);
    startActivityForResult(intent, requestCode);
}

@Override
public void setResultOk(Bundle bundle) {
    Intent intent = new Intent();
    if (bundle != null) ;
    intent.putExtras(bundle);
    setResult(RESULT_OK, intent);
    finish();
}

@Override
public void showToast(String msg) {
    presentationLayerFuncHelper.showToast(msg);
}

@Override
public void showProgressDialog() {
    presentationLayerFuncHelper.showProgressDialog();
}

@Override
public void hideProgressDialog() {
    presentationLayerFuncHelper.hideProgressDialog();
}

@Override
public void showSoftKeyboard(View focusView) {
    presentationLayerFuncHelper.showSoftKeyboard(focusView);
}

@Override
public void hideSoftKeyboard() {
    presentationLayerFuncHelper.hideSoftKeyboard();
}

@Override
protected void onDestroy() {
    EBApplication.ebApplication.deleteActivity(this);
    EventBus.getDefault().unregister(this);
    if (presenter != null) {
        presenter.detachView(this);
    }
    OkHttpManager httpManager = BridgeFactory.getBridge(Bridges.HTTP);
    httpManager.cancelActivityRequest(TAG);
    super.onDestroy();
}

}

PresentationLayerFuncHelper代码如下所示:

/**
* <页面基础公共功能实现>
*
* @author caoyinfei
* @version [版本号, 2016/6/6]
* @see [相关类/方法]
* @since [V1]
*/
public class PresentationLayerFuncHelper implements PresentationLayerFunc {

private Context context;

public PresentationLayerFuncHelper(Context context) {
    this.context = context;
}

@Override
public void showToast(String msg) {
    ToastUtil.makeText(context, msg);
}

@Override
public void showProgressDialog() {

}

@Override
public void hideProgressDialog() {

}

@Override
public void showSoftKeyboard(View focusView) {

}

@Override
public void hideSoftKeyboard() {

}

}

三个接口,分别为CreateInit, PublishActivityCallBack, PresentationLayerFunc代码如下所示:

/**
* <公共方法抽象>
*
* @author caoyinfei
* @version [版本号, 2014-3-24]
* @see [相关类/方法]
* @since [V1]
*/
public interface CreateInit {
/**
* 初始化布局组件
*/
public void initViews();

/**
 * 增加按钮点击事件
 */
void initListeners();

/**
 * 初始化数据
 */
public void initData();

/**
 * 初始化公共头部
 */
public void setHeader();

}

/**
* <页面跳转封装>
*
* @author caoyinfei
* @version [版本号, 2016/6/6]
* @see [相关类/方法]
* @since [V1]
*/
public interface PublishActivityCallBack {
/**
* 打开新界面
*
* @param openClass 新开页面
* @param bundle 参数
*/
public void startActivity(Class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值