package com.ydl.ydlcommon.base
import android.app.Application
import android.content.Context
import android.support.multidex.MultiDex
import com.ydl.ydlcommon.base.config.GlobalConfig
import com.ydl.ydlcommon.base.config.IApp
import com.ydl.ydlcommon.base.delegate.AppDelegate
import com.ydl.ydlcommon.base.delegate.IAppLifecycles
import com.ydl.ydlcommon.utils.YDLPreconditions
/**
* Created by haorui on 2019-08-21 .
* Des: 基础Application
*/
open class BaseApp : Application(), IApp {
private var mAppDelegate: IAppLifecycles? = null
companion object {
lateinit var instance: BaseApp
fun getApp(): Application {
return instance
}
}
/**
* 这里会在 [BaseApp.onCreate] 之前被调用,可以做一些较早的初始化
* 常用于 MultiDex 以及插件化框架的初始化
*
* @param base
*/
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
instance = this;
MultiDex.install(this)
if (mAppDelegate == null)
this.mAppDelegate = AppDelegate(base)
this.mAppDelegate!!.attachBaseContext(base)
}
override fun onCreate() {
super.onCreate()
if (mAppDelegate != null)
this.mAppDelegate!!.onCreate(this)
}
/**
* 在模拟环境中程序终止时会被调用
*/
override fun onTerminate() {
super.onTerminate()
if (mAppDelegate != null)
this.mAppDelegate!!.onTerminate(this)
}
override fun getGlobalConfig(): GlobalConfig {
YDLPreconditions.checkNotNull(
mAppDelegate,
"%s cannot be null",
AppDelegate::class.java.name
)
YDLPreconditions.checkState(
mAppDelegate is IApp,
"%s must be implements %s",
mAppDelegate!!::class.java.name,
IApp::class.java.name
)
return (mAppDelegate as IApp).getGlobalConfig()
}
}