接着上两篇文章中的组件化前奏,今天我们把组件化给整体串联起来形成一个简易的案例。
大纲:
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"); }