1,private AppLifecycles mAppDelegate;用于代理 {@link Application} 的生命周期,所做事情全部由它代理执行。
2,attachBaseContext(Context base) 在onCreate()前调用;
1,用反射, 将 AndroidManifest.xml 中带有 ConfigModule 标签的 class 转成对象集合(List<ConfigModule>) 2,将框架外部, 开发者实现的 Application,Activity 的生命周期回调 (ActivityLifecycleCallbacks) 存入 mActivityLifecycles 集合。 3,遍历 mAppLifecycles, 执行所有已注册的 AppLifecycles 的 attachBaseContext() 方法 (框架外部, 开发者扩展的逻辑)
3,onCreate()
1,AppComponent初始化, 还有各种生命周期注册(目前还不了解) 2,执行框架外部, 开发者扩展的 App onCreate 逻辑 (AppLifecycles)
4,onTerminate()
在模拟环境中程序终止时会被调用(据说真机上不会调用)
5,public AppComponent getAppComponent() {}
6,ActivityLifecycleCallbacks 我一行代码都不写实现Toolbar!你却还在封装BaseActivity? 作者写的很详细。
https://juejin.im/post/590f09ec128fe100584ee6b0
下面是代码:
/**
* ================================================
* MVPArms 是一个整合了大量主流开源项目的 Android MVP 快速搭建框架, 其中包含 Dagger2、Retrofit、RxJava 以及
* RxLifecycle、RxCache 等 Rx 系三方库, 并且提供 UI 自适应方案, 本框架将它们结合起来, 并全部使用 Dagger2 管理
* 并提供给开发者使用, 使用本框架开发您的项目, 就意味着您已经拥有一个 MVP + Dagger2 + Retrofit + RxJava 项目
*
* @see <a href="https://github.com/JessYanCoding/MVPArms/wiki">请配合官方 Wiki 文档学习本框架</a>
* @see <a href="https://github.com/JessYanCoding/MVPArms/wiki/UpdateLog">更新日志, 升级必看!</a>
* @see <a href="https://github.com/JessYanCoding/MVPArms/wiki/Issues">常见 Issues, 踩坑必看!</a>
* @see <a href="https://github.com/JessYanCoding/ArmsComponent/wiki">MVPArms 官方组件化方案 ArmsComponent, 进阶指南!</a>
* Created by JessYan on 22/03/2016
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* ================================================
*/
public class BaseApplication extends Application implements App {
private AppLifecycles mAppDelegate;
/**
* 这里会在 {@link BaseApplication#onCreate} 之前被调用,可以做一些较早的初始化
* 常用于 MultiDex 以及插件化框架的初始化
*
* @param base
*/
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
if (mAppDelegate == null)
this.mAppDelegate = new AppDelegate(base);
this.mAppDelegate.attachBaseContext(base);
}
@Override
public void onCreate() {
super.onCreate();
if (mAppDelegate != null)
this.mAppDelegate.onCreate(this);
}
/**
* 在模拟环境中程序终止时会被调用
*/
@Override
public void onTerminate() {
super.onTerminate();
if (mAppDelegate != null)
this.mAppDelegate.onTerminate(this);
}
/**
* 将 {@link AppComponent} 返回出去, 供其它地方使用, {@link AppComponent} 接口中声明的方法所返回的实例, 在 {@link #getAppComponent()} 拿到对象后都可以直接使用
*
* @see ArmsUtils#obtainAppComponentFromContext(Context) 可直接获取 {@link AppComponent}
* @return AppComponent
*/
@NonNull
@Override
public AppComponent getAppComponent() {
Preconditions.checkNotNull(mAppDelegate, "%s cannot be null", AppDelegate.class.getName());
Preconditions.checkState(mAppDelegate instanceof App, "%s must be implements %s", mAppDelegate.getClass().getName(), App.class.getName());
return ((App) mAppDelegate).getAppComponent();
}
}