简网项目中加入了某第三方监控的SDK,通过该监控平台监控到的数据,我发现一个可跟踪的ANR:
进一步查看信息,发现用户此时的手机运行内存已经很小:
既然是由很明显的、可跟踪的代码引起的,那么我们就看看究竟是什么代码:
public static void supperStart(Context context, ZhiyueApplication application, MainMeta meta, Uri splashIntentData) {
switch (application.getAppType()) {
case COMMUNITY: // 社区版
break;
case MEDIA: // 媒体版
case VIP: // 会员版
final AppParams.NavType navType = application.getNavType();
switch (navType) {
case MENU:
meta.setMain(true);
startMainFrameOnlyPush(context, meta);
break;
case CUBE:
context.startActivity(buildCubeNavIntent(context, meta, application.getBlockType()));
break;
case FIX:
context.startActivity(buildFixNavIntent(context, meta, splashIntentData));
break;
}
break;
case MOMMY:
context.startActivity(new Intent(context, MommyActivity.class));
break;
case PORTAL:
context.startActivity(new Intent(context, AppSquareActivity.class));
break;
default:
break;
}
}
跟进去发现application.getAppType()获取的是枚举:
public enum AppType {
MEDIA,
COMMUNITY,
VIP,
REGION,
PORTAL,
MAX,
MOMMY,
}
原来,在手机运存十分低的时候,执行这段枚举代码,又耗时又好内存,导致计算时间长于5秒,出现了ANR.