Android框架初探寻

    xiaoxiao2024-04-18  4

    前言

    今年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修改完,我就重构网络访问,现在不是说不能用。

    转载请注明原文地址: https://ju.6miu.com/read-1288125.html
    最新回复(0)