基础的框架已经搭好了
- Presenter 继承自(extend) ViewModel,实现(implements)LifecycleObserver
- Model 层就是简单的实现,利用Presenter层的lifecycle,对RxJava实现的网络请求做了内存泄漏的管理
- View层就是简单的写了一个BaseActivity实现了2个泛型,做一个些初始化简单的东西
- 后续就是继续封装一些公用类,方便后续使用MVP开发
- 下面简单的放了一些代码
public abstract class BasePresenter extends ViewModel implements LifecycleObserver {
private LifecycleOwner lifecycleOwner;
@Override
protected void onCleared() {
super.onCleared();
if (lifecycleOwner != null) {
lifecycleOwner.getLifecycle().removeObserver(this);
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
void onCreate() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onStart() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onStop() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestroy() {
}
public Lifecycle getLifecycle() {
return lifecycleOwner.getLifecycle();
}
public void attachLifeCycle(LifecycleOwner lifecycleOwner) {
this.lifecycleOwner = lifecycleOwner;
if (this.lifecycleOwner != null) {
this.lifecycleOwner.getLifecycle().addObserver(this);
}
}
}
这是最上层的类,功能也简单,有一个继承自他的实现类 BaseUIPresenter
abstract class BaseUIPresenter<T : IBaseView?> : BasePresenter() {
var view: T? = null
override fun onCleared() {
super.onCleared()
onDetach()
this.view = null
}
override fun onCreate() {
super.onCreate()
start()
}
override fun onResume() {
super.onResume()
}
/**
* attach 上你的view
*/
fun onAttachView(view: T?) {
this.view = view
}
/**
* 释放该释放的资源
*/
abstract fun onDetach()
/**
* 第一次操作
*/
abstract fun start()
}
也是比较简单的
后续的思考
- 实现RecyclerView+StateView+Presenter的封装,对于后续大量使用单一的列表,单接口的页面实现快速开发
- 对Dialog中请求的封装,因为我统一使用了DialogFragment,对内存管理基本上都可以放入Presenter中,主要是对使用Dialog中的单接口使用的情况
2021.9.7
- 最近完成了一个ListStatePresent和ListStateView的改造,这个针对单RecyclerView和单接口的情况
- 下一步将封装通用的Dialog,将分(AlertDialog,BottomDialog,CustomDialog),统一用DialogFragment使用,摒弃PupopWindow和Dialog
- 将图片加载简单封装一下
- 将整体项目改造,将ButterKinfe取消改用ViewBinding
- 尽量从Java切换到Kotlin
- 改造IM的写法,将数据库,调用做一个分离
- 改造音视频通话流程,其中包括(Push,应用内唤起,后台唤起等等)