Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在调试应用程序时检查当前正在运行的活动_Java_Android_Android Studio_Android Debugging - Fatal编程技术网

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

Java 如何在调试应用程序时检查当前正在运行的活动,java,android,android-studio,android-debugging,Java,Android,Android Studio,Android Debugging,我被别人开发的项目困住了。这是一个非常大的应用程序。因此,为了理解代码,我想知道流程,基本上是活动的名称(代码中的java文件),它当前正在我的手机上运行。我可以在所有活动中设置断点,但还有其他方法吗?简单- 在每个activity override onStart()方法中,按如下方式打印日志- @Override protected void onStart() { super.onStart(); Log.d("TAG -> ", "Y

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

简单-

在每个activity override onStart()方法中,按如下方式打印日志-

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("TAG -> ", "YOUR_ACTIVITY_NAME");
    }
当设备中的活动开始时,它将在logcat中打印日志。希望这会有帮助

使用,您不需要为所有活动添加处理。注册一次,它适用于所有活动,就是这样

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()

来识别哪个活动,找出启动活动并找出使用的方法和变量。。您可以使用“查找用法”(Ctrl+G)。

如果您的应用程序扩展了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()


这就是你所需要的。调试愉快:)

run
adb shell dumpsys activity top
这对我不起作用。我的应用程序类扩展了MultiDexApplication,是因为这个吗?你不必这样扩展你的应用程序类。您可以使用:getApplication().registerActivityLifecycleCallbacks(mCallbacks),另请参见,注意该代码段只是一个示例,您可以轻松地适应其他用例!!!