Подтвердить что ты не робот

Отладка в стиле Studio Studio

У меня возникла проблема с отладкой многопоточного приложения с Android Studio 1.1. Кажется, что, когда точка останова ударяется, все остальные потоки также останавливаются, а не только одна с точкой останова. Я создал простое тестовое приложение со следующим методом в Activity onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Thread a = new Thread("thread-a") {
        @Override
        public void run() {
            Log.v("thread", "thread-a");
        }
    };

    Thread b = new Thread("thread-b") {
        @Override
        public void run() {
            Log.v("thread", "thread-b");
        }
    };

    a.start();
    b.start();
}

Я установил точки останова в линиях Log.v в thread-a и thread-b, а затем запустил его в режиме отладки на моем Lollipop Nexus 5.

Когда приложение запускается, он попадает в точку останова в thread-a, но первая проблема, которую я замечаю, заключается в том, что пользовательский интерфейс приложения пуст, как если основной поток приостановлен. Затем я пошел посмотреть, что точка останова в thread-b также попала, поэтому я вытягиваю представление Threads в отладчике Android Studio, но когда я иду, чтобы развернуть нить-b, там ничего нет. Когда я расширяю основной поток, он показывает, что он приостановлен где-то в onStart().

Android Studio screenshot

Я делаю что-то неправильно или этот отладчик неспособен отлаживать сразу несколько потоков?

4b9b3361

Ответ 1

В IntelliJ IDEA (и Android Studio основана на IntelliJ), когда вы помещаете точку останова, если вы нажмете правой кнопкой мыши, отобразится диалог, и вы можете выбрать, приостанавливать ли все потоки (по умолчанию) или только этот поток.

Вы приостанавливаете все потоки, поскольку это значение по умолчанию.

Ответ 2

В Android Studio можно указать, будет ли заданная точка останова приостанавливать выполнение только исполняемого потока (который запускает точку останова) или всех потоков. Это зависит от точки останова (т.е. Некоторые точки останова могут приостанавливать все потоки, тогда как другие только приостанавливают текущий поток).

Щелкните правой кнопкой мыши точку останова, чтобы открыть окно свойств точки останова:

Свойства точки останова

Обратите внимание на параметр "Сделать по умолчанию", который позволяет использовать это значение по умолчанию для всех вновь созданных точек останова.

Если приостановлен только текущий поток (опция "Thread" на изображении выше), то стек кадров других неподдерживаемых потоков не будет виден в окне Frames:

Фреймы недоступны для несвязанного потока