简网项目中加入了某第三方监控的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.

results matching ""

    No results matching ""