我是靠谱客的博主 眼睛大大雁,这篇文章主要介绍android开发(如何开发一个可以维护的好项目):一 、定义基类,现在分享给大家,希望可以做个参考。

做 android开发,如果想开发一个可以维护的好项目,就得有个好的结构,和好的思想,如何去开发android,我便在这里讲解一下。首先,我要推荐一下我个人使用的mvp框架,目前也是我公司在使用的框架。这套框架最早是我建立的,目前我在维护和继续开发。框架地址dileber android框架 希望大家能多多star一下,点个赞啥的~如下也是对这个框架的一些讲解
首先做项目需要基类 activity有activity的基类,fragment 有fragment 的基类

建立一个TBaseActivity,这个类是抽象的,这个类实现了BView,BView包含了toast(提示),showAlert(弹框),loading(加载框),loadDialogDismiss(取消加载框),dialogOk(选择框),getContext(获取当前acitivity )。你看到的里面已经实现了,都是dileber框架里整合的一些ui控件。UUi 是ui的一些类,UDialog 是dialog 的方法,onDestroy和onResume,主要是生命周期的一类方法。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public abstract class TBaseActivity extends BaseActivity implements BView{ BasePresenter presenter; @Override public void toast(String msg, int duration) { UUi.toast(this,msg,duration); } @Override public void showAlert(Integer type, String message) { Logger.d("显示dialog"); UDialog.alert(type,message).show(); } Dialog dialog; @Override public void loading() { if(dialog==null){ dialog =UDialog.loading(); } dialog.show(); } @Override public void loadDialogDismiss() { if(dialog!=null){ dialog.dismiss(); } } @Override public void dialogOk(String content, DialogLinstener dialogLinstener) { UDialog.dialogOk(content,dialogLinstener).show(); } @Override public Context getContext() { return this; } @Override protected void onResume() { super.onResume(); if(presenter!=null){ presenter.start(); } } @Override protected void onDestroy() { super.onDestroy(); if(presenter!=null){ presenter.onDestroy(); } if(dialog!=null){ dialog.dismiss(); } } }

fragment的基类,和activity一样,就是多添加了一个监听器,能够和activity进行交互。数据的传输,目前我写的主要是交互 修改activity的标题,和activity最右边的button的样子,和button的事件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public abstract class TBaseFragment extends BaseFragment implements BView{ protected BasePresenter presenter; @Override public void toast(String msg, int duration) { UUi.toast(getActivity(),msg,duration); } @Override public void showAlert(Integer type, String message) { Logger.d("显示dialog"); UDialog.alert(type,message).show(); } Dialog dialog; @Override public void loading() { if(dialog==null){ dialog =UDialog.loading(); } dialog.show(); } @Override public void loadDialogDismiss() { if(dialog!=null){ dialog.dismiss(); } } @Override public void dialogOk(String content, DialogLinstener dialogLinstener) { } @Override public Context getContext() { return getActivity(); } @Override public void onResume() { super.onResume(); if(presenter!=null){ presenter.start(); } } @Override public void onDestroy() { super.onDestroy(); if(presenter!=null){ presenter.onDestroy(); } if(dialog!=null){ dialog.dismiss(); } } public void setPresenter(BasePresenter presenter) { this.presenter = presenter; } protected OnFragmentInteractionListener mListener; public interface OnFragmentInteractionListener { SFont onRightButtonFont(Integer res); void onTitleName(String title); } public SFont setRightButtonFont(Integer res) { if (mListener != null) { return mListener.onRightButtonFont(res); } return null; } public void setTitle(String title){ if (mListener != null) { mListener.onTitleName(title); } } @Override public void onDetach() { super.onDetach(); mListener = null; } }

还有一个并不能算是基类,但是在android开发中,需要自定义的一个类,入口类
Application

首先有个注解SFontdType,这个注解是我自定义的,这个注解的作用是将图标注入到android系统中,我将图标做成字体的形式,之后就能够注入系统,减少apk的大小,我的这篇手记有详细介绍 链接 如何更好的设计android图标 这个里面使用的是我最早写的dileber 1.0的代码,由于后期发现当时写的框架并不是很好,于是现在重新写了这个项目,原来1.0的版本也就不再维护了。全部用新项目了。

appForbidden方法,是网络请求出现403时回调的方法,如果出现403(网络请求被禁止,一般是请求出现权限不足,可能是session丢失了,于是我就在这里添加了回调接口,如果出现session丢失,框架会回调这个方法,让你去重新登录系统,或者刷新session,并且在刷新完后,你可以继续执行你刚刚被禁止的请求)
crash = false 是关闭掉 崩溃日志记录的代码。你可以打开它。
attachBaseContext 是做dex分包,如果你的项目小的话,没必要写这个。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
@SFontdType(value = "icomoon.ttf") public class TApplication extends SApplication { private static int forbidden = 0; @Override public void start() { crash = false; } @Override protected void init() { DemoHelper.getInstance().init(this); } private static final int maxForbidden = 10; @Override public void appForbidden(final Call call, Response response, final RetCallback retCallback) { forbidden ++; if(forbidden>10){ UiUtils.loginAgain(this,"账户需要重新登录"); forbidden = 0; return; } final UserDataSource userDataSource = UserRepository.getInstance(); userDataSource.getUser(new BaseDataSource.BaseCallback<UserModel>() { @Override public void onSuccess(UserModel userModel) { userDataSource.checkUser(userModel, new BaseDataSource.BaseCallback<UserWrapper>() { @Override public void onSuccess(UserWrapper userWrapper) { if(userWrapper.getState()== NetWorkEnum.Success.getVar()){ UserModel userModel1 = userWrapper.getData(); if(userModel1==null){ UUi.toast(ActivityManager.getCurrentActivity(),"用户异常,请检查", Toast.LENGTH_SHORT); }else{ /** * 再次请求 */ call.clone().enqueue(retCallback); } }else if(userWrapper.getState()==NetWorkEnum.Error.getVar()){ UiUtils.loginAgain(TakkyuuApplication.this,userWrapper.getMsg()); } } @Override public void onFailure(DataSourceException e) { UiUtils.loginAgain(TApplication.this,"账户需要重新登录"); } }); } @Override public void onFailure(DataSourceException e) { } }); } /** * 分割 Dex 支持 * @param base */ @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }

如上是最基础的三个类,都是我项目中使用的,我会继续讲解后续内容(包括如何使用mvp,如何将网络请求归类,如何解偶,fragment的工厂方法,如何正确使用fragment,如何使用框架里的网络请求,如何保存和使用session,如何使用枚举类,如何更好的使用android的本地存储,如何绘制基金图表),最终会把这个框架的内容全部讲解完毕。

最后

以上就是眼睛大大雁最近收集整理的关于android开发(如何开发一个可以维护的好项目):一 、定义基类的全部内容,更多相关android开发(如何开发一个可以维护的好项目):一内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部