From 12ecc7cf0c25726107e267784d3d1f2b3298826c Mon Sep 17 00:00:00 2001 From: donghongyu Date: Sat, 27 Nov 2021 00:18:27 +0800 Subject: [PATCH] =?UTF-8?q?[Add]=20=E5=A2=9E=E5=8A=A0APP=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=97=B6=E9=95=BF=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- .../mogo-core-function-main/build.gradle | 2 + .../function/main/MainMoGoApplication.java | 5 ++ .../utilcode/mogo/AppLaunchTimeUtils.java | 58 +++++++++++++++++++ .../com/mogo/module/main/MainActivity.java | 32 ++++++++++ 4 files changed, 97 insertions(+) create mode 100644 core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/AppLaunchTimeUtils.java diff --git a/core/function-impl/mogo-core-function-main/build.gradle b/core/function-impl/mogo-core-function-main/build.gradle index 302f3076e7..3d9e888c16 100644 --- a/core/function-impl/mogo-core-function-main/build.gradle +++ b/core/function-impl/mogo-core-function-main/build.gradle @@ -87,6 +87,7 @@ dependencies { implementation rootProject.ext.dependencies.moduleservice implementation rootProject.ext.dependencies.mogo_core_data + implementation rootProject.ext.dependencies.mogo_core_utils implementation rootProject.ext.dependencies.mogo_core_function_obu_mogo implementation rootProject.ext.dependencies.mogo_core_function_smp implementation rootProject.ext.dependencies.mogo_core_function_hmi @@ -123,6 +124,7 @@ dependencies { implementation project(':modules:mogo-module-service') implementation project(':core:mogo-core-data') + implementation project(':core:mogo-core-utils') implementation project(':core:function-impl:mogo-core-function-obu-mogo') implementation project(':core:function-impl:mogo-core-function-smp') implementation project(':core:function-impl:mogo-core-function-hmi') diff --git a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index d791a71401..6aa67a8340 100644 --- a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -20,6 +20,7 @@ import com.mogo.commons.network.Utils; import com.mogo.eagle.core.data.constants.MoGoConfig; import com.mogo.eagle.core.data.constants.MogoServicePaths; import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils; import com.mogo.map.MapApiPath; import com.mogo.module.carchatting.card.CallChatConstant; import com.mogo.module.common.MogoApisHandler; @@ -344,6 +345,10 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); + /**如果是主进程**/ + if (ProcessUtils.isMainProcess(this)) { + AppLaunchTimeUtils.beginTimeCalculate(AppLaunchTimeUtils.COLD_START); + } BoostMultiDex.install(base); } } diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/AppLaunchTimeUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/AppLaunchTimeUtils.java new file mode 100644 index 0000000000..d8318a2b75 --- /dev/null +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/AppLaunchTimeUtils.java @@ -0,0 +1,58 @@ +package com.mogo.eagle.core.utilcode.mogo; + +import java.util.HashMap; + +/** + * 应用启动计时工具 + */ +public class AppLaunchTimeUtils { + private static HashMap sCalTimeMap = new HashMap<>(); + public static final String COLD_START = "cold_start"; + public static final String HOT_START = "hot_start"; + public static long sColdStartTime = 0; + + /** + * 记录某个事件的开始时间 + * + * @param key 事件名称 + */ + public static void beginTimeCalculate(String key) { + long currentTime = System.currentTimeMillis(); + sCalTimeMap.put(key, currentTime); + } + + /** + * 获取某个事件的运行时间 + * + * @param key 事件名称 + * @return 返回某个事件的运行时间,调用这个方法之前没有调用 {@link #beginTimeCalculate(String)} 则返回-1 + */ + public static long getTimeCalculate(String key) { + long currentTime = System.currentTimeMillis(); + Long beginTime = sCalTimeMap.get(key); + if (beginTime == null) { + return -1; + } else { + sCalTimeMap.remove(key); + return currentTime - beginTime; + } + } + + /** + * 清除某个时间运行时间计时 + * + * @param key 事件名称 + */ + public static void clearTimeCalculate(String key) { + sCalTimeMap.remove(key); + } + + /** + * 清除启动时间计时 + */ + public static void clearStartTimeCalculate() { + clearTimeCalculate(HOT_START); + clearTimeCalculate(COLD_START); + sColdStartTime = 0; + } +} diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 4d7ed61433..966be80f93 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -25,6 +25,7 @@ import com.mogo.commons.mvp.MvpActivity; import com.mogo.commons.mvp.MvpFragment; import com.mogo.eagle.core.data.constants.MoGoFragmentPaths; import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils; import com.mogo.eagle.core.utilcode.mogo.toast.ResourcesHelper; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.uicontroller.EnumMapUI; @@ -154,6 +155,7 @@ public class MainActivity extends MvpActivity implement @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + calculateStartTime(); ContextHolderUtil.holdContext(this); mPresenter.postLoadModuleMsg(); NetworkUtils.listenNetStrength(this); @@ -163,6 +165,36 @@ public class MainActivity extends MvpActivity implement mPresenter.checkPermission(this); } + private void calculateStartTime() { + long coldStartTime = AppLaunchTimeUtils.getTimeCalculate(AppLaunchTimeUtils.COLD_START); + // 这里记录的TimeUtils.coldStartTime是指Application启动的时间,最终的冷启动时间等于Application启动时间+热启动时间 + AppLaunchTimeUtils.sColdStartTime = coldStartTime > 0 ? coldStartTime : 0; + AppLaunchTimeUtils.beginTimeCalculate(AppLaunchTimeUtils.HOT_START); + } + + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + if (hasFocus) { + long hotStartTime = AppLaunchTimeUtils.getTimeCalculate(AppLaunchTimeUtils.HOT_START); + if (AppLaunchTimeUtils.sColdStartTime > 0 && hotStartTime > 0) { + // 真正的冷启动时间 = Application启动时间 + 热启动时间 + long coldStartTime = AppLaunchTimeUtils.sColdStartTime + hotStartTime; + // 过滤掉异常启动时间 + if (coldStartTime < 50000) { + // 上传冷启动时间coldStartTime + Logger.i(TAG, "coldStartTime:" + coldStartTime); + } + } else if (hotStartTime > 0) { + // 过滤掉异常启动时间 + if (hotStartTime < 30000) { + // 上传热启动时间hotStartTime + Logger.i(TAG, "hotStartTime:" + hotStartTime); + } + } + } + } + private void init() { if (mServiceApis == null) { mServiceApis = MogoApisHandler.getInstance().getApis();