如何在调试应用程序时检查当前正在运行的活动

5

我被卡在了别人开发的一个项目上。这是一个非常大的应用程序。因此,为了理解代码,我想知道流程,基本上是当前在我的手机上运行的活动的名称(代码中的Java文件)。我可以在所有活动中设置断点,但是否有其他方法?


4
运行命令 adb shell dumpsys activity top - pskink
5个回答

8

你可以使用adb来实现。

在终端中输入命令adb shell dumpsys activity top


1
这正是我一直在寻找的。对于调试你的应用程序启动的运行活动非常有用。 - Max

5

使用ActivityLifecycleCallbacks,您无需为所有活动添加处理。 只需进行一次注册即可,它适用于所有活动,就这样!

public class MyApplication extends Application implements
   ActivityLifecycleCallbacks{

@Override
public void onCreate() {
    super.onCreate();           
}

@Override
public void onActivityStopped(Activity activity) {
    Log.i("Tracking Activity Stopped", activity.getLocalClassName());

}

@Override
public void onActivityStarted(Activity activity) {
    Log.i("Tracking Activity Started", activity.getLocalClassName());

}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    Log.i("Tracking Activity SaveInstanceState", activity.getLocalClassName());
}

@Override
public void onActivityResumed(Activity activity) {
    Log.i("Tracking Activity Resumed", activity.getLocalClassName());
}

@Override
public void onActivityPaused(Activity activity) {
    Log.i("Tracking Activity Paused", activity.getLocalClassName());
}

@Override
public void onActivityDestroyed(Activity activity) {
    Log.i("Tracking Activity Destroyed", activity.getLocalClassName());
}

@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    Log.i("Tracking Activity Created", activity.getLocalClassName());
    }
}

请注意,你可以通过 activity.getLocalClassName() 识别当前活动。

这对我不起作用。我的应用程序类扩展了MultiDexApplication,是因为这个原因吗? - Isj
你不必以这种方式扩展你的应用程序类。你可以使用:getApplication().registerActivityLifecycleCallbacks(mCallbacks),参见https://gist.github.com/alexjlockwood/6298122,注意代码片段仅为示例,你可以轻松地适应其他用例!!! - David

0
从清单中找出启动活动并查找使用的方法和变量。您可以使用“查找用法”(Ctrl+G)。

0
如果您的应用程序扩展了MultiDexApplication类,这里有一个可行的解决方案。
在扩展MultiDexApplication的应用程序类的onCreate()方法中,添加以下行以注册回调函数。
@Override
public void onCreate() {
    super.onCreate();
    registerActivityLifecycleCallbacks(new MyActivityLifecycleCallbacks());
} 

现在创建一个内部类,实现 ActivityLifecycleCallbacks 接口,如下所示:

private static final class MyActivityLifecycleCallbacks implements ActivityLifecycleCallbacks {
        public void onActivityCreated(Activity activity, Bundle bundle) {
            Log.v("Application","Created");
        }
        public void onActivityDestroyed(Activity activity) {
            Log.v("Application","Destroyed");
        }
        public void onActivityPaused(Activity activity) {
            Log.v("Application","Paused");

        }
        public void onActivityResumed(Activity activity) {
            Log.v("Application","Resumed");


        }
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            Log.v("Application","onActivitySaveInstanceState");
        }
        public void onActivityStarted(Activity activity) {
            Log.v("Application","Started");
        }
        public void onActivityStopped(Activity activity) {
            Log.v("Application","Stopped");
        }
    }

现在你可以在任何需要重写的方法中使用 activity.getLocalClassName()

这就是你所需要的一切。祝您调试愉快 :)


0

简单 -

在每个活动中重写onStart()方法并像这样打印日志 -

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("TAG -> ", "YOUR_ACTIVITY_NAME");
    }

当您的设备启动活动时,它将在logcat中打印日志。希望这能帮到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接