android组件化方案整理
之前整理过组件化的知识点以后,就开始弄公司的项目了。这里把暂时遇到的几个问题整理一下。
AAR的引入问题
情景: 把aar放到commentLibrary里面,在其他project或者library中调用其中的方法,就避免了重复复制的问题。
在commentLibrary里配置好以后,你所有引入这个library中都再需要配置一下:
在android节点内:
repositories {
flatDir {
dirs '../commonlibrary/libs'
}
}
组件化和MVP的碰撞
之前的MVP一直用的都是比较简单的形式,V(Library中的fragment)和P的绑定是放到activity(project的Main)中,也就是fragment初始化的时候的。但是我们的组件化是肯定要解耦的,那么activity中就不能有Lirbrary中类的引入。所以之前的MVP就需要改变一下。那么fragment和BaseView中间就需要抽离出来一个BaseFragment,它既作为ARouter初始化的返回:
Fragment fragment = (Fragment) ARouter.getInstance().build(RouteUtils.CaptureScene_Fragment_Main).navigation();
也作为activity中初始化的使用:
BaseFragment tasksFragment =
(BaseFragment) getSupportFragmentManager().findFragmentById(R.id.contentFrame);
if (tasksFragment == null) {
// Create the fragment
tasksFragment = FragmentUtils.getCaptureSceneFragment();
ActivityUtils.addFragmentToActivity(
getSupportFragmentManager(), tasksFragment, R.id.contentFrame);
}
同时,把V和P层的绑定放到BaseFragment中:
public abstract class BaseFragment<V extends BaseView, P extends BaseMvpPresenter<V>> extends Fragment {
private P presenter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (presenter == null) {
presenter = createPresenter();
}
if (presenter == null) {
throw new NullPointerException("presenter 不能为空!");
}
//绑定view
presenter.onAttachMvpView((V) this);
}
/**
* 创建Presenter
*
* @return 子类自己需要的Presenter
*/
protected abstract P createPresenter();
public P getPresenter() {
return presenter;
}
}
这里推荐一下高级MVP架构封装演变全过程
我在去年的时候有参考他的基础架构写过OKHTTP的基于OKhttp的MVP封装,他提供了多种进阶方案,比较你能百度到的大多数MVP的文章,我认为他是写的不错的。