Android組件化實例精講(service註冊方式)

  • 2020 年 3 月 26 日
  • 筆記

接著上兩篇文章中的組件化前奏,今天我們把組件化給整體串聯起來形成一個簡易的案例。

大綱:

1 如何讓各個獨立的組件在殼工程中可隨意拿取訪問?

2如何進行組件數據傳遞?

一 如何在殼中隨意拿取組件

為了可隨時拿取組件我們需要藉助一個單例來統一管理這些組件----這樣無論是殼中還是組件中均可以隨意拿取各個組件進行交互

public class ServiceFactory {    private ServiceFactory() {      }      private static ServiceFactory serviceFactory = new ServiceFactory();      public static ServiceFactory getInstance() {        return serviceFactory;    }      private ILoginService loginService;      public ILoginService getLoginService() {        return loginService;    }      public void setLoginService(ILoginService loginService) {        this.loginService = loginService;    }}

從上問程式碼我們可以通過ServiceFactory拿取到各個組件,但是怎麼讓各個組件能夠完美的在殼工程啟動時註冊進來呢?這就需要我們之前說的各個組件如何隨殼工程一起啟動啦 不是太了解的看之前的文章,我們直接上程式碼

此處需要分為兩部分

1 組件啟動的Application中註冊

2 註冊金組件中類為了解耦添加中間service來註冊進ServiceFactory,使用是通過service間接訪問組件和完成數據傳遞

①組件對應的Application

public class LoginApplication extends Application implements IAppService {      @Override    public void initApp(Application mainApp) {        ServiceFactory.getInstance().setLoginService(new LoginService());      }      @Override    public void initAppFinish() {//做一些基礎的針對性的配置操作      }}

② 中間service

public class LoginService implements ILoginService {    @Override    public void launch(Context context, String userId) {        Intent intent = new Intent(context, LoginActivity.class);        intent.putExtra("userId", userId);        context.startActivity(intent);    }      @Override    public Fragment getFragment(FragmentManager fragmentManager, int viewId, ViewGroup root) {          return null;    }}

②中的launch即是中間媒介用於進行Activity啟動和參數傳遞

大致就是這些了,我們來看看是如何在殼工程中使用的吧

    public void launchLogin(View view) {        ServiceFactory.getInstance()                .getLoginService()                .launch(this, "123");    }

Tags: