您的位置:首页 > 移动开发 > Android开发

Android框架初探寻

2016-08-12 14:01 218 查看

前言

今年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修改完,我就重构网络访问,现在不是说不能用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 开发框架