Android框架初探寻

前言

今年7月初,去了一家创业公司实习,担任唯一的android开发程序猿,接手了之前外包出去的项目。由于一开始就要改bug,加需求,因此没有机会探寻别人的开发框架,现在基本需求都完成的差不多了,就来研究一下别人的开发框架是怎么样的。

Application

项目中,创建了一个类继承自Applcation类,使用了“懒汉模式”,并且用LinkedList维护了一个Activity列表,暴露了添加Activity和删除Activity方法,见如下代码:

public class MyApplication extends Application {

    private static MyApplication myApplication;
    private List<Activity> activityList = new LinkedList<Activity>();   

    @Override
    public void onCreate() {
        super.onCreate();
        myApplication = this;
    }

    public static MyApplication getInstance() {
        if (myApplication == null) {
            myApplication = new MyApplication();
        }
        return myApplication;
    }

    public void addActivity(Activity activity) {
        activityList.add(activity);
    }

    public void removeActivity(Activity activity) {
        activityList.remove(activity);
    }

    public void exit() {
        for (Activity activity : activityList) {
            activity.finish();
        }
    }
}

BaseActivity

如果说项目的每一个页面,都可能会有访问网络、弹出等待框、初始化控件、初始化数据、设置点击事件、设置注解框架等操作,那么使用BaseActivity是很好的选择,可以节省大量重复的代码并且让你的逻辑更加清晰。
由于项目使用的是国产框架Afinal,所以还需要继承自FinalActivity。

public abstract class BaseActvity extends FinalActivity{
    protected Context myContext;
    protected MyProgressDialog waitDialog = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        context = this;
    }

    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(layoutResID);
        myContext = this;
        // 添加注解框架
        FinalActivity.initInjectedView(this);
        // 初始化等待对话框
        initWaitDialog(this);
        // 添加Activity到MyApplication
        addActivity();
        // 让子类去实现下列抽象方法
        initView();
        initData();
        setListener();
    }

    protected abstract void initView();

    protected abstract void initData();

    protected abstract void setListener();

    public void addActivity() {
        MyApplication.getInstance().addActivity(this);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        MyApplication.getInstance().removeActivity(this);
    }

    public void showToast(String text) {
        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
    }   

    public void initWaitDialog(BaseActvity baseActvity) {
        if (waitDialog == null) {
            waitDialog = new MyProgressDialog(baseActvity);
            waitDialog.setCancelable(false);
        }
    }

    public void showLoadWait(String msg) {
        waitDialog.show();
        waitDialog.setMessage(msg);
    }

    public void stopLoadWait() {
        if (waitDialog != null && waitDialog.isShowing()) {
            waitDialog.hide();
        }
    }
}

网络访问框架

接手的项目使用的是Afinal框架,WebService也是用的AfinalWebService,对于老旧的框架我不是很满意。项目的用法也是存在问题,没有使用单例+Builder的模式进行封装,而是每次访问网络都new一个对象,这样使用不仅低效而且每次使用都要重新写访问的url和参数,下面贴出项目中的坑爹的做法:

//每一个Activiy的每一个网络访问操作都要写一个这样的方法,每次都要new一个对象
private void getAppVersion() {
        String url = AfinalWebservice.urlAddPathParams("sys", "version");
        AfinalWebservice afinalWebservice = new AfinalWebservice(this, url, ReqParam.ReqType.GetAppVersion, this);
        afinalWebservice.noParAfinalGet();
        showLoadWait("请稍后,数据获取中...");
    }

等需求满足完,bug修改完,我就重构网络访问,现在不是说不能用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值