元件化中遇到的問題
阿新 • • 發佈:2018-12-19
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的文章,我認為他是寫的不錯的。