package com.ittianyu.pocenter.common.base; import android.app.Application; import android.content.Context; import android.content.pm.ApplicationInfo; import android.support.multidex.MultiDex; import com.ittianyu.pocenter.BuildConfig; import com.ittianyu.pocenter.common.api.Repertories; import com.ittianyu.pocenter.common.tinker.FetchPatchHandler; import com.orhanobut.logger.LogLevel; import com.orhanobut.logger.Logger; import com.squareup.leakcanary.LeakCanary; import com.tencent.tinker.loader.app.ApplicationLike; import com.tinkerpatch.sdk.TinkerPatch; import com.tinkerpatch.sdk.loader.TinkerPatchApplicationLike; /** * Created by yu on 2016/11/24. */ public class BaseApplication extends Application { private static Context context; private static Repertories repertories; // tinker patch config private ApplicationLike tinkerApplicationLike; @Override public void onCreate() { super.onCreate(); // tinker patch config tinkerPatchConfig(); context = getApplicationContext(); initLogger(); initLeakCanary(); repertories = new Repertories(context.getCacheDir()); } private void tinkerPatchConfig() { // 我们可以从这里获得Tinker加载过程的信息 if (BuildConfig.TINKER_ENABLE) { tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike(); // 初始化TinkerPatch SDK TinkerPatch.init(tinkerApplicationLike) .reflectPatchLibrary() .setPatchRollbackOnScreenOff(true) .setPatchRestartOnSrceenOff(true); // 每隔3个小时去访问后台时候有更新,通过handler实现轮训的效果 new FetchPatchHandler().fetchPatchWithInterval(3); } } /** * use LeakCanary to check mey leak */ private void initLeakCanary() { if (LeakCanary.isInAnalyzerProcess(this)) { // This process is dedicated to LeakCanary for heap analysis. // You should not init your app in this process. return; } LeakCanary.install(this); } /** * init logger */ private void initLogger() { if ((0 != (getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE))) Logger.init(); // for debug, print all log else Logger.init().logLevel(LogLevel.NONE); // for release, remove all log // Logger.init(); // for release, remove all log } public static Context getContext() { return context; } public static Repertories getRepertories() { return repertories; } /** * tinker * @param base */ @Override public void attachBaseContext(Context base) { super.attachBaseContext(base); //you must install multiDex whatever tinker is installed! MultiDex.install(base); } }