Как остановить работу программы в Eclipse?


107

Я не могу найти возможность остановить запущенную программу (в режиме отладки или выпуска).

Так что пока я останавливаю программу (возвращаю управление Eclipse), просто закрывая эмулятор.

Есть ли лучший способ сделать это? Так что мне не нужно закрывать (и перезапускать) эмулятор?

Ответы:


112

Насколько я понимаю, вы хотите остановить свое приложение на эмуляторе. Для этого вы можете открыть окно устройств (в перспективе отладки), выбрать процесс и затем нажать кнопку остановки в том же окне.


1
Спасибо. Вы спасли мою жизнь. Я приму твой ответ через 7 минут ... :)
Android Eve

1
Добавляем еще один способ, который я только что обнаружил: в эмуляторе выберите Настройки> Приложения> Управление приложениями> (выберите приложение)> Принудительная остановка.
Android Eve,

Я. это другой способ, но чтобы добраться до него, нужно время, если только у вас этого нет в фоновом режиме. :)
Варун

11
кнопка Stop, как в Visual Studio, была бы так хороша. тьфу.
Ян Дэвис

Просто запустил приложение сразу после создания проекта, и при нажатии кнопки остановки он не прервал процесс, а запустил RemoteException sending setActive(false) notificationв окне просмотра
logCat

77

Те, кому утомительно переключаться между перспективами для остановки программы (как я), вы можете просмотреть окна устройств в своей текущей перспективе, выбрав

Windows > Показать вид > Другое ... > Android > Устройства


3
Спасибо, это именно то, что я искал! +1
Сабобин

+1. Отлично !, и если я хочу, чтобы он снова запустился, я просто снова запускаю его с устройства, и он отлично работает.
Франсиско Корралес Моралес

Еще один шаг, найдите свой packageID в списке. Сначала меня это оттолкнуло, но потом я подумал: «Круто! Я все вижу». Приятно видеть, что у Android есть под капотом (примечание: я использую симулятор Genymotion, возможно, эмулятор - это то, что вы говорите, я просто не могу ждать, пока он запустится)
Стивен Дж.

Это нарушает жизненный цикл приложения Android и может привести к некорректным выходам, что приведет к невозможности перезапустить приложение и принудительной перезагрузке устройства для устранения проблемы.
Доминик Черизано

13

Имейте в виду, что на Android программы обычно «останавливаются» только после завершения () или система уничтожает их, когда требуется память. Зачем вообще останавливаться? Вам не нужно останавливаться, например, для исправления / переустановки / повторного тестирования.


Это отличное понимание. Спасибо. +1
Android Eve

1
@ Ева ... с удовольствием. Для получения кровавых подробностей см. Stackoverflow.com/questions/2033914/…
DJC

4
Что же, может быть. Но это не совсем ответ на вопрос. В моем случае я играю с классом AudioTrack и генерирую поток звуков. Постоянно слушать эту синусоиду становится действительно неприятно. Мне нужно перейти в DDMS, найти нужную ветку, выбрать ее, а затем найти значок СТОП. Очень хромой.
Vagrant

2
Как можно сбросить состояние вашей программы, не останавливаясь?
Эрик Энгхейм, 01

Я заметил с помощью эмулятора, что он не запустит вашу программу снова, пока не пройдет несколько минут или около того (вероятно, потому, что он все еще работает). Это удобно, чтобы закончить раньше, когда вам нужно сделать небольшое правка, а затем быстро проверить это в эмуляторе. Часто вы вносите несколько небольших изменений, поэтому возможность остановить работающее приложение и перезагрузить его для быстрой проверки экономит много времени.
Azurespot

12

В перспективе «Отладка» выберите корень приложения в разделе «Отладка» (где находится список активных потоков) и нажмите кнопку остановки.


и тебе спасибо. Я понял вашу инструкцию только после прочтения @ varun's. +1
Android Eve

@Android Eve, ну, я рада, что это помогло. Извините, это было недостаточно ясно!
Крис Томпсон

Все нормально. Я полностью дезориентирован в отношении разработки под Android, несмотря на (и, возможно, из-за) многих лет разработки на многих других платформах.
Android Eve,

Да, это, безусловно, самое простое решение. (На самом деле, это должен быть принятый ответ). Кнопка «Стоп» отключается, только когда поток выделен вместо верхней записи [Android Application].
Colin

7

Работает на меня.

Windows -> Открыть перспективу -> Другое ... -> DDMS

  1. В окне Android в левых окнах вы можете увидеть «Устройства». Должен быть список приложений, которые сейчас работают (эмулятор или физические устройства). Щелкните приложение, которое хотите закрыть. Обычно имя - это имя пакета + имя приложения.
  2. Теперь нажмите на символ «Стоп».

Чтобы вернуться к нормальному виду, вам просто нужно нажать кнопку Java в правом верхнем углу. Вы также можете сделать это, нажав: Windows -> Открыть перспективу -> Другое ... -> Java


2

этот ответ не касается Eclipse, но поскольку этот вопрос возникает в поиске Google для остановки работающей программы Android, я хотел бы предложить метод командной строки. run adb shell, найдите PID процесса, который вы хотите убить ps, например, мой был:

u0_a46 2097 37 175520 19912 ffffffff 40037ebc S net.unternet.bleah.blarg

так что тогда просто, kill 2097и вы должны снова увидеть главный экран.


Нарушение жизненного цикла приложения. Может вызвать проблемы с неосвобождением системных ресурсов и принудительной перезагрузкой устройства.
Доминик Черизано

0

Добавьте точку останова в свой код, где вы хотите остановиться, а затем запустите ее в режиме отладки, нажав F11.


0

Android-зомби Рисунок 1 - Многие зомби были убиты во время исследования этого ответа

Не рекомендуется завершать процесс виртуальной машины Java приложения Android на уровне ОС. К сожалению, это именно то, что делает «стоп» окна устройства eclipse, как и System.exit () и команда оболочки «kill».

Это подрывает обычные методы жизненного цикла приложения, такие как onStop (), onDestroy () и finalize ().

Многие приложения требуют этих методов для плавного выхода (например, если они используют системные объекты, такие как Sensor, MediaPlayer, Equalizer, Visualizer и т. Д.).

Эти системные объекты держатся с мертвой хваткой зомби на системных ресурсах, если release () не вызывается явно во время этих методов жизненного цикла. См. Рис. 1 выше. Это может предотвратить перезапуск приложения и даже потребовать перезагрузки. Это неприятный аспект.

Единственное решение - убедиться, что вы всегда аккуратно выходите из приложения с помощью вызова onStop () или onDestroy () или, по крайней мере, finalize (). Отладчик делает это, как и ОС при выключении.

Вы можете настроить приложение на перехват событий SIG_HUP, чтобы принудительно выполнить плавный выход из командной строки.

Единственный раз, когда вы убиваете виртуальную машину приложения, находится в состоянии ANR (уже в состоянии зомби). Ошибки ANR должны быть исправлены. Никогда не развертывайте приложение, которое может войти в это состояние. Это очень грубо.

Вы можете использовать Google Analytics и Play Store, чтобы отслеживать их при развертывании. Вы же не хотите, чтобы рассерженные пользователи оставляли однозвездочные обзоры ANR после перезагрузки из-за вашего зомби-приложения. Очень плохо.

Помните, что Android - это Linux: относитесь к нему как к настоящей ОС и уважайте жизненный цикл приложения, иначе вы обязательно столкнетесь с ужасным зомби-апокалипсисом.

PS: Если вам не нравится аналогия с зомби, как насчет Fantasia?

введите описание изображения здесь


0

См. Рисунок: 1. Щелкните DDMS; 2. Выберите текущее приложение; 3. Нажмите «Стоп». введите описание изображения здесь


Я делаю это, и приложение перестает отлаживать. но есть случай: 1 - отключите устройство от USB, запустите приложение, затем, когда приложение столкнется с ошибкой, оно закроется, и после этого при каждом запуске вызывайте форму отладки и ждите, пока USB-кабель подключится или нажмите кнопку возврата. 2- устройство подключается к usb и запускается приложение (Ctrl + f11), затем приложение автоматически запускается в режиме отладки. Чтобы решить эту проблему, я создал новый проект и один за другим скопировал / вставил файлы в новый проект, но то же самое происходит снова. Теперь какая-нибудь помощь?
Ахмад Эбрахими
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.