package com.dl7.mvp; import android.annotation.TargetApi; import android.app.Application; import android.content.Context; import android.content.Intent; import android.os.Build; import android.support.multidex.MultiDex; import com.dl7.downloaderlib.DownloadConfig; import com.dl7.downloaderlib.FileDownloader; import com.dl7.mvp.api.RetrofitService; import com.dl7.mvp.engine.DownloaderWrapper; import com.dl7.mvp.injector.components.ApplicationComponent; import com.dl7.mvp.injector.components.DaggerApplicationComponent; import com.dl7.mvp.injector.modules.ApplicationModule; import com.dl7.mvp.local.dao.NewsTypeDao; import com.dl7.mvp.local.table.DaoMaster; import com.dl7.mvp.local.table.DaoSession; import com.dl7.mvp.rxbus.RxBus; import com.dl7.mvp.utils.CrashHandler; import com.dl7.mvp.utils.DownloadUtils; import com.dl7.mvp.utils.PreferencesUtils; import com.dl7.mvp.utils.ToastUtils; import com.dl7.tinkerlib.Log.MyLogImp; import com.dl7.tinkerlib.util.TinkerManager; import com.orhanobut.logger.Logger; import com.squareup.leakcanary.LeakCanary; import com.tencent.tinker.anno.DefaultLifeCycle; import com.tencent.tinker.lib.tinker.Tinker; import com.tencent.tinker.lib.tinker.TinkerInstaller; import com.tencent.tinker.loader.app.DefaultApplicationLike; import com.tencent.tinker.loader.shareutil.ShareConstants; import org.greenrobot.greendao.database.Database; import java.io.File; /** * Created by long on 2016/8/19. * Application */ @SuppressWarnings("unused") @DefaultLifeCycle(application = "com.dl7.mvp.MvpApplication", flags = ShareConstants.TINKER_ENABLE_ALL, loadVerifyFlag = false) public class AndroidApplication extends DefaultApplicationLike { private static final String DB_NAME = "news-db"; private static ApplicationComponent sAppComponent; private static Context sContext; private DaoSession mDaoSession; // 因为下载那边需要用,这里在外面实例化在通过 ApplicationModule 设置 private RxBus mRxBus = new RxBus(); public AndroidApplication(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) { super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent); } /** * install multiDex before install tinker * so we don't need to put the tinker lib classes in the main dex * * @param base */ @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public void onBaseContextAttached(Context base) { super.onBaseContextAttached(base); sContext = getApplication(); //you must install multiDex whatever tinker is installed! MultiDex.install(base); TinkerManager.setTinkerApplicationLike(this); TinkerManager.initFastCrashProtect(); //should set before tinker is installed TinkerManager.setUpgradeRetryEnable(true); //optional set logIml, or you can use default debug log TinkerInstaller.setLogIml(new MyLogImp()); //installTinker after load multiDex //or you can put com.tencent.tinker.** to main dex TinkerManager.installTinker(this); Tinker tinker = Tinker.with(getApplication()); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) { getApplication().registerActivityLifecycleCallbacks(callback); } @Override public void onCreate() { super.onCreate(); _initDatabase(); _initInjector(); _initConfig(); } /** * 使用Tinker生成Application,这里改成静态调用 * @return */ public static ApplicationComponent getAppComponent() { return sAppComponent; } public static Context getContext() { return sContext; } /** * 初始化注射器 */ private void _initInjector() { // 这里不做注入操作,只提供一些全局单例数据 sAppComponent = DaggerApplicationComponent.builder() .applicationModule(new ApplicationModule(this, mDaoSession, mRxBus)) .build(); } /** * 初始化数据库 */ private void _initDatabase() { DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(getApplication(), DB_NAME); Database database = helper.getWritableDb(); mDaoSession = new DaoMaster(database).newSession(); NewsTypeDao.updateLocalData(getApplication(), mDaoSession); DownloadUtils.init(mDaoSession.getBeautyPhotoInfoDao()); } /** * 初始化配置 */ private void _initConfig() { if (BuildConfig.DEBUG) { LeakCanary.install(getApplication()); Logger.init("LogTAG"); } CrashHandler.getInstance().init(getApplication()); RetrofitService.init(); ToastUtils.init(getApplication()); DownloaderWrapper.init(mRxBus, mDaoSession.getVideoInfoDao()); FileDownloader.init(getApplication()); DownloadConfig config = new DownloadConfig.Builder() .setDownloadDir(PreferencesUtils.getSavePath(getApplication()) + File.separator + "video/").build(); FileDownloader.setConfig(config); } }