Как проверить, какое действие выполняется в данный момент при отладке приложения
Я застрял с проектом, разработанным кем-то другим. Это очень большое приложение. Поэтому, чтобы понять код, я хочу узнать поток, в основном название действия (файл 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()
в любом переопределенном методе, который вам нужен.
Это было бы все, что вам нужно. Удачной Отладки:)