四大组件Debug--Activity

详细的Log打印可以看Activity 启动流程log分析

关于Activity的debug,android里面已经提供了2个debug文件

frameworks/base/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerDebugConfig.java

1. ActivityManagerDebugConfig

里面提供了如下debug开关,可以根据实际需求来打开对应的开关,其中DEBUG_ALL是打开所有开关,对应的TAG是ActivityManager,列举了几个重要的debug开关

   // Default log tag for the activity manager package.
    static final String TAG_AM = "ActivityManager";

    // Enable all debug log categories.
    static final boolean DEBUG_ALL = false;

    // Available log categories in the activity manager package.
    static final boolean DEBUG_ANR = false;
    static final boolean DEBUG_BACKGROUND_CHECK = DEBUG_ALL || false;
    // broadcast相关的log
    static final boolean DEBUG_BROADCAST = DEBUG_ALL || false;
    // provider相关的log
    static final boolean DEBUG_PROVIDER = DEBUG_ALL || false;
    // service相关的log
    static final boolean DEBUG_SERVICE = DEBUG_ALL || false;

里面提供的Log已经可以满足大部分的debug需求了,方便跟踪相关的流程。如果想打印Activity的生命周期的相关,则需要另外选择debug点

2. ActivityTaskManagerDebugConfig

这个类里面,提供了所有和Activity相关的debug开关

    // Default log tag for the activities.
    static final String TAG_ATM = "ActivityTaskManager";

    // Enable all debug log categories.
    static final boolean DEBUG_ALL = false;

    // Enable all debug log categories for activities.
    private static final boolean DEBUG_ALL_ACTIVITIES = DEBUG_ALL || false;

    static final boolean DEBUG_ADD_REMOVE = DEBUG_ALL_ACTIVITIES || false;
    public static final boolean DEBUG_CONFIGURATION = DEBUG_ALL || false;
    static final boolean DEBUG_CONTAINERS = DEBUG_ALL_ACTIVITIES || false;
    static final boolean DEBUG_FOCUS = false;
    static final boolean DEBUG_IMMERSIVE = DEBUG_ALL || false;
    static final boolean DEBUG_LOCKTASK = DEBUG_ALL || false;
    static final boolean DEBUG_PAUSE = DEBUG_ALL || false;
    static final boolean DEBUG_RECENTS = DEBUG_ALL || false;
    static final boolean DEBUG_RECENTS_TRIM_TASKS = DEBUG_RECENTS || false;
    static final boolean DEBUG_SAVED_STATE = DEBUG_ALL_ACTIVITIES || false;
    static final boolean DEBUG_STACK = DEBUG_ALL || false;
    static final boolean DEBUG_STATES = DEBUG_ALL_ACTIVITIES || false;
    public static final boolean DEBUG_SWITCH = DEBUG_ALL || false;
    static final boolean DEBUG_TASKS = DEBUG_ALL || false;
    static final boolean DEBUG_TRANSITION = DEBUG_ALL || false;
    static final boolean DEBUG_VISIBILITY = DEBUG_ALL || false;
    static final boolean DEBUG_APP = DEBUG_ALL_ACTIVITIES || false;
    static final boolean DEBUG_IDLE = DEBUG_ALL_ACTIVITIES || false;
    static final boolean DEBUG_RELEASE = DEBUG_ALL_ACTIVITIES || false;
    static final boolean DEBUG_USER_LEAVING = DEBUG_ALL || false;
    static final boolean DEBUG_PERMISSIONS_REVIEW = DEBUG_ALL || false;
    static final boolean DEBUG_RESULTS = DEBUG_ALL || false;
    public static final boolean DEBUG_CLEANUP = DEBUG_ALL || false;
    public static final boolean DEBUG_METRICS = DEBUG_ALL || false;

其中 DEBUG_STATES 开关可以打印Activity的所有生命周期变化,在ActivityRecord类里面,文件路径如下:

frameworks/base/services/core/java/com/android/server/wm/ActivityRecord.java

其中setState方法会打印生命周期变化及原因

    void setState(ActivityState state, String reason) {
        if (DEBUG_STATES) Slog.v(TAG_STATES, "State movement: " + this + " from:" + getState()
                        + " to:" + state + " reason:" + reason);
    }

通过adb logcat命令过滤ActivityTaskManager,START u代表启动了一个应用,对把Log打印和现象的时间点对上有很大的帮助

08-22 19:30:25.743  1350  1450 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.dialer/.main.impl.MainActivity bnds=[637,1133][839,1345] (has extras)} from uid 10103
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值