| | |
| | | package com.weikou.beibeivideo; |
| | | |
| | | import android.app.Activity; |
| | | import android.app.ActivityManager; |
| | | import android.app.Application; |
| | | import android.content.BroadcastReceiver; |
| | | import android.content.ComponentName; |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.content.IntentFilter; |
| | | import android.content.SharedPreferences; |
| | | import android.os.Build; |
| | | import android.os.Bundle; |
| | | import android.os.Handler; |
| | | import android.os.Message; |
| | | import android.support.multidex.MultiDex; |
| | | import android.telephony.TelephonyManager; |
| | | import android.util.Log; |
| | | import android.webkit.WebView; |
| | | import android.widget.Toast; |
| | | |
| | | import com.alibaba.baichuan.android.trade.AlibcTradeSDK; |
| | | import com.alibaba.baichuan.android.trade.callback.AlibcTradeInitCallback; |
| | | import com.baidu.mobads.AppActivity; |
| | | import com.fun.xm.FSPlayer; |
| | | import com.funshion.playsdk.callback.FunshionPlayInitCallback; |
| | | import com.bytedance.applog.AppLog; |
| | | import com.bytedance.applog.InitConfig; |
| | | import com.bytedance.applog.util.UriConstants; |
| | | import com.bytedance.sdk.dp.DPSdk; |
| | | import com.bytedance.sdk.dp.DPSdkConfig; |
| | | import com.bytedance.sdk.dp.IDPPrivacyController; |
| | | import com.bytedance.sdk.openadsdk.TTAdSdk; |
| | | import com.funshion.playsdk.register.IAuthCodeGetter; |
| | | import com.kwad.sdk.api.KsAdSDK; |
| | | import com.kwad.sdk.api.KsCustomController; |
| | | import com.kwad.sdk.api.SdkConfig; |
| | | import com.lcjian.library.util.ManifestDataUtil; |
| | | import com.lcjian.library.util.common.DeviceUtil; |
| | | import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; |
| | | import com.nostra13.universalimageloader.core.ImageLoader; |
| | | import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; |
| | | import com.nostra13.universalimageloader.core.assist.QueueProcessingType; |
| | | import com.qq.e.comm.managers.GDTADManager; |
| | | import com.qq.e.comm.managers.GDTAdSdk; |
| | | import com.qq.e.comm.managers.setting.GlobalSetting; |
| | | import com.tencent.mm.opensdk.constants.ConstantsAPI; |
| | | import com.tencent.mm.opensdk.openapi.IWXAPI; |
| | | import com.tencent.mm.opensdk.openapi.WXAPIFactory; |
| | |
| | | import com.umeng.commonsdk.UMConfigure; |
| | | import com.umeng.socialize.PlatformConfig; |
| | | import com.umeng.socialize.UMShareAPI; |
| | | import com.weikou.beibeivideo.entity.ad.AdPidInfo; |
| | | import com.weikou.beibeivideo.entity.ad.AdPositionEnum; |
| | | import com.weikou.beibeivideo.entity.ad.SplashAdLoadInfo; |
| | | import com.weikou.beibeivideo.ui.SplashActivity; |
| | | import com.weikou.beibeivideo.ui.ad.SplashADFragment; |
| | | import com.weikou.beibeivideo.ui.ad.SplashAdActivity; |
| | | import com.weikou.beibeivideo.util.BeibeiConstant; |
| | | import com.weikou.beibeivideo.util.CrashHandler; |
| | | import com.weikou.beibeivideo.util.FunshionConstant; |
| | | import com.weikou.beibeivideo.util.DebuggerUtils; |
| | | import com.weikou.beibeivideo.util.UserUtil; |
| | | import com.weikou.beibeivideo.util.ad.AdUtil; |
| | | import com.weikou.beibeivideo.util.ad.CSJConstant; |
| | | import com.weikou.beibeivideo.util.ad.GDTConstant; |
| | | import com.weikou.beibeivideo.util.ad.GMAdManagerHolder; |
| | | import com.weikou.beibeivideo.util.ad.TTAdManagerHolder; |
| | | import com.weikou.beibeivideo.util.downutil.StringUtils; |
| | | import com.yeshi.appupdate.util.PackageUtils2; |
| | | |
| | | import org.apache.http.Header; |
| | | import org.greenrobot.eventbus.EventBus; |
| | | import org.json.JSONObject; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | |
| | | import androidx.multidex.MultiDex; |
| | | |
| | | |
| | | public class BeibeiVideoApplication extends Application { |
| | | |
| | | private final String TAG = BeibeiVideoApplication.class.getName(); |
| | | private final static String TAG = BeibeiVideoApplication.class.getSimpleName(); |
| | | |
| | | public static BeibeiVideoApplication application = null; |
| | | public static String deviceName = null; |
| | |
| | | return instance; |
| | | } |
| | | |
| | | private Handler handler = new Handler() { |
| | | private static boolean inited = false; |
| | | |
| | | private static List<Activity> mActivitys = Collections.synchronizedList(new LinkedList<Activity>()); |
| | | |
| | | public static void pushActivity(Activity activity) { |
| | | mActivitys.add(activity); |
| | | } |
| | | |
| | | public static void popActivity(Activity activity) { |
| | | mActivitys.remove(activity); |
| | | } |
| | | |
| | | public static void finishAllActivity() { |
| | | if (mActivitys == null) { |
| | | return; |
| | | } |
| | | for (Activity activity : mActivitys) { |
| | | activity.finish(); |
| | | } |
| | | mActivitys.clear(); |
| | | } |
| | | |
| | | |
| | | //兼容4.4以下版本 |
| | | protected void attachBaseContext(Context newBase) { |
| | | super.attachBaseContext(newBase); |
| | | MultiDex.install(this); |
| | | } |
| | | |
| | | private static Handler handler = new Handler() { |
| | | @Override |
| | | public void handleMessage(Message msg) { |
| | | super.handleMessage(msg); |
| | |
| | | }; |
| | | |
| | | |
| | | private IAuthCodeGetter.AuthCodeCallBack authCodeCallBack; |
| | | private static IAuthCodeGetter.AuthCodeCallBack authCodeCallBack; |
| | | |
| | | @Override |
| | | public void onCreate() { |
| | |
| | | } |
| | | |
| | | application = this; |
| | | MultiDex.install(this); |
| | | //友盟初始化 |
| | | String description = ManifestDataUtil.getAppMetaData(this, "UMENG_CHANNEL"); |
| | | UMConfigure.init(this, getResources().getString(R.string.umeng_key), description, UMConfigure.DEVICE_TYPE_PHONE, null); |
| | | // 选用AUTO页面采集模式 |
| | | MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO); |
| | | |
| | | |
| | | UMShareAPI.get(this); |
| | | PlatformConfig.setWeixin(BeibeiConstant.WECHAT_ID, BeibeiConstant.WECHAT_KEY); |
| | | PlatformConfig.setQQZone(BeibeiConstant.QQ_ID, BeibeiConstant.QQ_KEY); |
| | | PlatformConfig.setSinaWeibo(BeibeiConstant.SINA_ID, BeibeiConstant.SINA_KEY, "http://sns.whalecloud.com/sina2/callback"); |
| | | super.onCreate(); |
| | | instance = this; |
| | | ImageLoader.getInstance().init(buildDefaultILC(this)); |
| | | // initX5(); |
| | | initCSJAd(); |
| | | GDTADManager.getInstance().initWith(this, BeibeiConstant.GDT_ID); |
| | | initWX(); |
| | | initTaoKe(); |
| | | try { |
| | | //初始化播放插件 |
| | | FSPlayer.init(this, FunshionConstant.APP_ID, new IAuthCodeGetter() { |
| | | @Override |
| | | public void getAuthCode(AuthCodeCallBack authCodeCallBack) { |
| | | BeibeiVideoApplication.this.authCodeCallBack = authCodeCallBack; |
| | | handler.sendEmptyMessage(0); |
| | | } |
| | | }, new FunshionPlayInitCallback() { |
| | | |
| | | @Override |
| | | public void onSuccess() { |
| | | Log.i(TAG, "风行播放器初始化成功"); |
| | | } |
| | | |
| | | @Override |
| | | public void onFail(int i, String s) { |
| | | Log.i(TAG, "风行播放器初始化失败:" + i + "-" + s); |
| | | } |
| | | }); |
| | | } catch (Exception e) { |
| | | |
| | | MultiDex.install(this); |
| | | if (UserUtil.isAgreeUserProtocol(this) || BeibeiConstant.IS_TEST) { |
| | | //如果同意了用户协议 |
| | | init(application, null); |
| | | } |
| | | //百度内容联盟 |
| | | try { |
| | | AppActivity.setActionBarColorTheme(AppActivity.ActionBarColorTheme.ACTION_BAR_BLACK_THEME); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | private void initWX() { |
| | | public static boolean IsInited() { |
| | | return inited; |
| | | } |
| | | |
| | | /** |
| | | * 静态初始化 |
| | | * |
| | | * @param application |
| | | */ |
| | | public static void init(final Application application, InitListener initListener) { |
| | | Log.i(TAG, "系统初始化"); |
| | | inited = true; |
| | | registerActivityListener(application); |
| | | //防止动态代码注入 |
| | | DebuggerUtils.checkDebuggableInNotDebugModel(application); |
| | | try { |
| | | Build bd = new Build(); |
| | | String model = bd.MODEL; |
| | | BeibeiVideoApplication.deviceName = model; |
| | | BeibeiVideoApplication.deviceNumber = DeviceUtil.getImeiCache(application); |
| | | } catch (Exception e) { |
| | | } |
| | | |
| | | //解决错误:Using WebView from more than one process at once with the same data directory is not supported |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { |
| | | String processName = getProcessName(application); |
| | | String packageName = application.getPackageName(); |
| | | if (!packageName.equals(processName)) { |
| | | WebView.setDataDirectorySuffix(processName); |
| | | } |
| | | } |
| | | |
| | | //友盟初始化 |
| | | String description = ManifestDataUtil.getAppMetaData(application, "UMENG_CHANNEL"); |
| | | try { |
| | | UMConfigure.setLogEnabled(false); |
| | | UMConfigure.submitPolicyGrantResult(application, false); |
| | | UMConfigure.init(application, application.getResources().getString(R.string.umeng_key), description, UMConfigure.DEVICE_TYPE_PHONE, null); |
| | | // 选用AUTO页面采集模式 |
| | | MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO); |
| | | |
| | | UMConfigure.submitPolicyGrantResult(application, false); |
| | | } catch (Throwable e) { |
| | | |
| | | } |
| | | |
| | | UMShareAPI.get(application); |
| | | PlatformConfig.setWeixin(BeibeiConstant.WECHAT_ID, BeibeiConstant.WECHAT_KEY); |
| | | PlatformConfig.setQQZone(BeibeiConstant.QQ_ID, BeibeiConstant.QQ_KEY); |
| | | PlatformConfig.setSinaWeibo(BeibeiConstant.SINA_ID, BeibeiConstant.SINA_KEY, "http://sns.whalecloud.com/sina2/callback"); |
| | | |
| | | ImageLoader.getInstance().init(buildDefaultILC(application)); |
| | | initCSJAd(application, initListener); |
| | | initKSSDK(application); |
| | | try { |
| | | GlobalSetting.setEnableCollectAppInstallStatus(false); |
| | | GDTAdSdk.init(application, BeibeiConstant.GDT_ID); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | initWX(application); |
| | | initX5(application); |
| | | } |
| | | |
| | | private static String getProcessName(Context context) { |
| | | if (context == null) return null; |
| | | ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); |
| | | for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) { |
| | | if (processInfo.pid == android.os.Process.myPid()) { |
| | | return processInfo.processName; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | private static void initWX(Context context) { |
| | | //AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换 |
| | | mWxApi = WXAPIFactory.createWXAPI(this, BeibeiConstant.WECHAT_ID, true); |
| | | mWxApi = WXAPIFactory.createWXAPI(context, BeibeiConstant.WECHAT_ID, true); |
| | | // 将该app注册到微信 |
| | | mWxApi.registerApp(BeibeiConstant.WECHAT_ID); |
| | | registerReceiver(new BroadcastReceiver() { |
| | | context.registerReceiver(new BroadcastReceiver() { |
| | | @Override |
| | | public void onReceive(Context context, Intent intent) { |
| | | // 将该app注册到微信 |
| | |
| | | } |
| | | |
| | | |
| | | private void initTaoKe() { |
| | | AlibcTradeSDK.asyncInit(this, new AlibcTradeInitCallback() { |
| | | @Override |
| | | public void onSuccess() { |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(int code, String msg) { |
| | | Log.i(TAG,"百川初始化失败:"+code+"-"+msg); |
| | | } |
| | | }); |
| | | |
| | | |
| | | public static void initTaoKe(Application application, AlibcTradeInitCallback alibcTradeInitCallback) { |
| | | if (!AlibcTradeSDK.initState.isInitialized()) { |
| | | Toast.makeText(application, "初始化淘客", Toast.LENGTH_SHORT).show(); |
| | | AlibcTradeSDK.asyncInit(application, alibcTradeInitCallback); |
| | | } else { |
| | | alibcTradeInitCallback.onSuccess(); |
| | | } |
| | | } |
| | | |
| | | |
| | | private ImageLoaderConfiguration buildDefaultILC(Context context) { |
| | | private static ImageLoaderConfiguration buildDefaultILC(Context context) { |
| | | // This configuration tuning is custom. You can tune every option, you may tune some of them, |
| | | // or you can create default configuration by |
| | | // ImageLoaderConfiguration.createDefault(this); method. |
| | |
| | | return config.build(); |
| | | } |
| | | |
| | | private void initX5() { |
| | | private static void initX5(Application application) { |
| | | QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { |
| | | |
| | | @Override |
| | | public void onViewInitFinished(boolean arg0) { |
| | | // TODO Auto-generated method stub |
| | | //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。 |
| | | Log.d(TAG, " onViewInitFinished is " + arg0); |
| | | } |
| | |
| | | } |
| | | }; |
| | | //x5内核初始化接口 |
| | | QbSdk.initX5Environment(getApplicationContext(), cb); |
| | | QbSdk.initX5Environment(application, cb); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 穿山甲广告初始化 |
| | | */ |
| | | private void initCSJAd() { |
| | | TTAdManagerHolder.init(this); |
| | | private static void initCSJAd(Application context, InitListener initListener) { |
| | | TTAdManagerHolder.init(context, new TTAdSdk.Callback() { |
| | | @Override |
| | | public void success() { |
| | | if (initListener != null) |
| | | initListener.onFinish(); |
| | | initDPSDK(context); |
| | | } |
| | | |
| | | @Override |
| | | public void fail(int i, String s) { |
| | | if (initListener != null) |
| | | initListener.onFinish(); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | //快手初始化 |
| | | public static void initKSSDK(Context appContext) { |
| | | if (!AdUtil.isCanInitCSJ()) { |
| | | return; |
| | | } |
| | | KsAdSDK.init(appContext, new SdkConfig.Builder() |
| | | .appId("801000001") // 测试aapId,请联系快⼿平台申请正式AppId,必填 |
| | | .appName(appContext.getString(R.string.app_name)) // 测试appName,请填写您应⽤的名称,⾮必填 |
| | | .showNotification(true) // 是否展示下载通知栏 |
| | | .debug(false) |
| | | .customController(new KsCustomController() { |
| | | @Override |
| | | public boolean canReadLocation() { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public boolean canUsePhoneState() { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public boolean canUseOaid() { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public String getImei() { |
| | | return DeviceUtil.getImeiCache(appContext); |
| | | } |
| | | |
| | | @Override |
| | | public boolean canUseMacAddress() { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public boolean canReadInstalledPackages() { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getInstalledPackages() { |
| | | return DeviceUtil.getInstalledPackageNamesCache(appContext); |
| | | } |
| | | })// 是否开启sdk 调试⽇志 可选 |
| | | .build()); |
| | | } |
| | | private static boolean dpSDKIninted; |
| | | |
| | | public static void initDPSDK(Application application) { |
| | | if (!AdUtil.isCanInitCSJ()) { |
| | | return; |
| | | } |
| | | |
| | | /* 初始化开始 */ |
| | | final InitConfig config = new InitConfig("5095354", ManifestDataUtil.getAppMetaData(application, "UMENG_CHANNEL")); // appid和渠道,appid如不清楚请联系客户成功经理,注意第二个参数 channel 不能为空 |
| | | config.setUriConfig(UriConstants.DEFAULT);//上报地址 |
| | | // 加密开关,SDK 5.5.1 及以上版本支持,false 为关闭加密,上线前建议设置为 true |
| | | AppLog.setEncryptAndCompress(true); |
| | | config.setAutoStart(true); |
| | | AppLog.init(application, config); |
| | | /* 初始化结束 */ |
| | | |
| | | if (!dpSDKIninted) { |
| | | DPSdkConfig.Builder configBuilder = new DPSdkConfig.Builder() |
| | | .debug(false) |
| | | .privacyController(new IDPPrivacyController() { |
| | | @Override |
| | | public boolean isCanUsePhoneState() { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public String getImei() { |
| | | return DeviceUtil.getImeiCache(application); |
| | | } |
| | | |
| | | @Override |
| | | public String getImsi() { |
| | | return DeviceUtil.getImsiCache(application); |
| | | } |
| | | |
| | | @Override |
| | | public boolean isCanUseAndroidId() { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public String getAndroidId() { |
| | | return super.getAndroidId(); |
| | | } |
| | | }); |
| | | // .initListener(new DPSdkConfig.InitListener() { |
| | | // @Override |
| | | // public void onInitComplete(boolean b, String s) { |
| | | // dpSDKIninted = b; |
| | | // } |
| | | // }) //接入了红包功能需要传入的参数,没有接入的话可以忽略该配置 |
| | | // .luckConfig(new DPSdkConfig.LuckConfig().application(application).enableLuck(false)) |
| | | // .liveConfig(new DPSdkConfig.LiveConfig()) |
| | | |
| | | //若您需要接入直播,参考「直播接入文档」;否则可忽略此参数。 |
| | | try { |
| | | DPSdk.init(application, "SDK_Setting_5095354.json", configBuilder.build()); |
| | | DPSdk.start(new DPSdk.StartListener() { |
| | | @Override |
| | | public void onStartComplete(boolean b, String s) { |
| | | dpSDKIninted = b; |
| | | Log.i(TAG," DPSdk.start:"+b+", "+s); |
| | | } |
| | | }); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | class MyActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks { |
| | | private int mFinalCount; |
| | | |
| | | @Override |
| | | public void onActivityCreated(Activity activity, Bundle savedInstanceState) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityStarted(Activity activity) { |
| | | mFinalCount++; |
| | | //如果mFinalCount ==1,说明是从后台到前台 |
| | | if (mFinalCount == 1) { |
| | | Log.e(TAG, "应用从后台切换到前台"); |
| | | // 进入前台 改为热启动 |
| | | //判断当前activity |
| | | ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); |
| | | ComponentName cn = am.getRunningTasks(1).get(0).topActivity; |
| | | if (!cn.getClassName().equalsIgnoreCase(SplashActivity.class.getName())) { |
| | | //小于30分钟不展示 |
| | | // 测试 |
| | | if (System.currentTimeMillis() - SplashADFragment.lastShowTime < 1000 * 60 * 30L) |
| | | return; |
| | | |
| | | if (SplashADFragment.isAdLoaded()) { |
| | | startActivity(new Intent(getApplicationContext(), SplashAdActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); |
| | | return; |
| | | } |
| | | |
| | | AdUtil.AD_TYPE type1 = AdUtil.getAdType(getApplicationContext(), AdPositionEnum.splashHotStart); |
| | | String pid1 = AdUtil.getAdPid(getApplicationContext(), AdPositionEnum.splashHotStart); |
| | | |
| | | |
| | | AdPidInfo adPidInfo1 = null; |
| | | AdPidInfo adPidInfo2 = null; |
| | | if (type1 != null) { |
| | | String defaultPid = null; |
| | | if (type1 == AdUtil.AD_TYPE.csj) { |
| | | defaultPid = CSJConstant.SPLASH_AD_HOT; |
| | | } else if (type1 == AdUtil.AD_TYPE.gdt) { |
| | | defaultPid = GDTConstant.PID_SPLASH_HOT; |
| | | } |
| | | if (StringUtils.isNullOrEmpty(pid1)) { |
| | | defaultPid = pid1; |
| | | } |
| | | adPidInfo1 = new AdPidInfo(type1, defaultPid); |
| | | if (type1 == AdUtil.AD_TYPE.csj) { |
| | | adPidInfo2 = new AdPidInfo(AdUtil.AD_TYPE.gdt, GDTConstant.PID_SPLASH_HOT); |
| | | } else if (type1 == AdUtil.AD_TYPE.gdt) { |
| | | adPidInfo2 = new AdPidInfo(AdUtil.AD_TYPE.csj, CSJConstant.SPLASH_AD_HOT); |
| | | } |
| | | } |
| | | |
| | | |
| | | SplashADFragment.loadAd(getApplicationContext(), adPidInfo1, adPidInfo2, null, null, true, new SplashADFragment.AdLoadResultListener() { |
| | | |
| | | @Override |
| | | public void onAdLoad(SplashAdLoadInfo adLoadInfo) { |
| | | //展示广告 |
| | | try { |
| | | startActivity(new Intent(getApplicationContext(), SplashAdActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); |
| | | } catch (SecurityException e) { |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onAdClick() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onNoAd() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onClose() { |
| | | //广点通广告适用 |
| | | //结束广告 |
| | | //通过eventbus通知页面关闭 |
| | | EventBus.getDefault().post(new SplashAdLoadInfo(null, 0)); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityResumed(Activity activity) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityPaused(Activity activity) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityStopped(Activity activity) { |
| | | mFinalCount--; |
| | | //如果mFinalCount ==0,说明是前台到后台 |
| | | if (mFinalCount == 0) { |
| | | Log.e(TAG, "应用从前台切换到后台"); |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivitySaveInstanceState(Activity activity, Bundle outState) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityDestroyed(Activity activity) { |
| | | |
| | | } |
| | | } |
| | | |
| | | public interface InitListener { |
| | | public void onFinish(); |
| | | |
| | | } |
| | | |
| | | private static void registerActivityListener(Application application) { |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { |
| | | application.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { |
| | | @Override |
| | | public void onActivityCreated(Activity activity, Bundle savedInstanceState) { |
| | | /** |
| | | * 监听到 Activity创建事件 将该 Activity 加入list |
| | | */ |
| | | pushActivity(activity); |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityStarted(Activity activity) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityResumed(Activity activity) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityPaused(Activity activity) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityStopped(Activity activity) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivitySaveInstanceState(Activity activity, Bundle outState) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onActivityDestroyed(Activity activity) { |
| | | if (null==mActivitys||mActivitys.isEmpty()) { |
| | | return; |
| | | } |
| | | if (mActivitys.contains(activity)) { |
| | | /** |
| | | * 监听到 Activity销毁事件 将该Activity 从list中移除 |
| | | */ |
| | | popActivity(activity); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | } |