Android 冷启动耗时,时长统计

2023-04-12


背景:


在App的开发过程中,application是一个程序的入口,一般好多程序都是在这里初始化,抢占初始化最佳时机。由于很多初始化抢占时机会导致进程在初始化的时候特别耗时,这样会导致app的体验急剧下降。如何监控app冷起已成为一个热门话题。


冷起占用时间过长,会导致在体验等各方面都很不好。这时,我们需要统计哪些设备在冷起比较耗时。


冷起:又叫新进程创建,指当前app进行不在虚拟机内,需要创新创建。从创建和第一个页面的过程,叫冷起。


如何统计冷起:


1:我们只需要在application中进行即可。每个页面或者application在被加载到内存中都会回调




attachBaseContext(Context)。即当前已被添加成功。所以在application中,我们只需要在




attachBaseContext(Context)中记录一下启动时间,




@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    starttime = System.currentTimeMillis();
}



2:监听第一个页面(action=Main)的入口页面,如何监听?其实我们可以通过




registerActivityLifecycleCallbacks()监听activity的生命周期回调来监听。




在application中注册一个生命周期回调,




public interface ActivityLifecycleCallbacks {
    void onActivityCreated(Activity activity, Bundle savedInstanceState);
    void onActivityStarted(Activity activity);
    void onActivityResumed(Activity activity);
    void onActivityPaused(Activity activity);
    void onActivityStopped(Activity activity);
    void onActivitySaveInstanceState(Activity activity, Bundle outState);
    void onActivityDestroyed(Activity activity);
}



我们根据自己的业务在指定的回调方法进行业务判断,接下来我们采用onActivityCreated()进行处理。如果你认为onActivityStarted()才算启动完成,也可以将代码添加在此处。


接下来处理tagActivity的启动模式,判断是否是入口页面




public static final String ACTON_MAIN = "android.intent.action.MAIN";
 
 
Set set = activity.getIntent().getCategories();
//
String action = activity.getIntent().getAction();
//
 
if (TextUtils.equals(ACTON_MAIN, action)) {
    endTime = System.currentTimeMillis();
    long total = endTime - starttime;
}



如果当前action是android.intent.action.MAIN,代表是程序入口。我们只要统计一次即可。


通过时间做减法,即可得出冷启动的耗时。


本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。

免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com