Судя по документации, вы должны вызывать release() в эквалайзере, медиаплеере, визуализаторе и т. д. для корректного выхода, иначе вы увидите эту ошибку при перезапуске приложения. Единственное средство тогда — перезагрузка, как упоминалось ранее в этой теме.
Именно здесь жизненный цикл приложения Android немного усложняет ситуацию, поскольку приложения никогда не должны завершаться (просто приостанавливаться и возобновляться), если только ОС не требует абсолютной памяти или не происходит перезагрузка. Метод вашего приложения onDestroy() вызывается в обоих случаях.
Вы можете поместить release() в onDestroy(), и это удовлетворит жизненный цикл Android для развернутых приложений. Ваши пользователи не увидят эту ошибку.
Однако в процессе разработки возникает проблема: IDE, такие как Eclipse (которая на самом деле является платформой для создания IDE, а не сама IDE...), будут убивать процесс приложения, а не отправлять ему сообщение об уничтожении. Это нарушает жизненный цикл, и функция release() не вызывается.
Вот почему вы никогда не должны вызывать System.exit(). Это нарушает жизненный цикл с риском неизящных выходов точно так же, как это.
Итак, ваш процесс завершался некрасиво. Происходит только в разработке, а не в развертывании. Одно из средств — не использовать окно устройства в eclipse для остановки процессов. Это не остановка, а убийство.
Eclipse также убивает (нарушение жизненного цикла) процесс некрасиво, когда вы запускаете проект приложения, когда уже запущен экземпляр.
Как сказал доктор, если это больно, не делайте этого: вместо этого используйте отладчик, который отправляет приложению фактические сообщения жизненного цикла.
person
Dominic Cerisano
schedule
22.01.2015