Skip to content

Android:ActivityStackTrace

Android Activity의 Stack정보를 출력하는 방법에 대한 설명.

in ADB

커멘드 창에서 아래와 같이 사용하면 된다.

$ adb shell dumpsys activity

in Java

TOP Activity를 확인하는 유틸리티 클래스는 아래와 같다.

package com.zekitalk.cinema.util;

import java.util.List;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
import android.util.Log;

/**
 * 현재 Activity의 STACK정보를 조사할 수 있는 클래스.<br>
 * 아래와 같이 권한을 추가해야한다.<br>
 * <code>
 * <uses-permission android:name="android.permission.GET_TASKS" />
 * </code>
 * 
 * @author cwlee
 * @since 2013-09-26
 */
public class ActivityStackTrace {

    public static final String kTagName = ActivityStackTrace.class.toString();
    public static final int kDefaultGetRunningTaskNumber = 100;

    /** 생성자를 지원하지 않는다. */
    protected ActivityStackTrace() {
        throw new UnsupportedOperationException();
    }

    public static void print(Context c) {
        print(c, kDefaultGetRunningTaskNumber);
    }

    public static void print(Context c, int tasksize) {
        print(c, c.getPackageName(), tasksize);
    }

    public static void print(Context c, String packagename, int tasksize) {
        ActivityManager am = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE);
        if (am != null) {
            List<RunningTaskInfo> task_list = am.getRunningTasks(tasksize);
            if (task_list != null && task_list.size() > 0) {
                for (RunningTaskInfo cursor : task_list) {
                    if (packagename.compareTo(cursor.baseActivity.getPackageName()) == 0) {
                        Log.i(kTagName, cursor.topActivity.toString());
                    }
                }
            }
        }
    }
}