Как проверить, какое действие выполняется в данный момент при отладке приложения

Я застрял с проектом, разработанным кем-то другим. Это очень большое приложение. Поэтому, чтобы понять код, я хочу узнать поток, в основном название действия (файл java в коде), которое в данный момент выполняется на моем телефоне. Я могу поставить контрольные точки во всех видах деятельности, но есть ли другой способ?

5 ответов

Вы можете использовать для этого adb.

В вашем терминале запустите adb shell dumpsys activity top.

Используя 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 ().

Просто -

В каждом действии переопределите метод onStart() и напечатайте журнал следующим образом:

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

Когда активность начнется на вашем устройстве, он напечатает журнал в logcat. Надеюсь, это поможет!

Из манифеста выясните активность запуска и выясните, какие методы и переменные используются. Вы можете использовать "Find Usages" ( Ctrl+G).

Если ваше приложение расширяет класс MultiDexApplication, то это рабочее решение.

В методе onCreate() вашего класса приложения, который расширяет MultiDexApplication, добавьте следующую строку для регистрации обратных вызовов.

@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() в любом переопределенном методе, который вам нужен.

Это было бы все, что вам нужно. Удачной Отладки:)

Другие вопросы по тегам