2013-06-21 6 views
1

Мое приложение записывает аудио с использованием AudioRecord API на переднем плане или backgroud (когда приложение сведено к минимуму), но аудиофайл повреждается, когда пользователь принудительно останавливает приложение из диспетчера приложений.Как получить обратный вызов, когда приложение принудительно остановлено

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

Как справиться с этой ситуацией?

ответ

2

Согласно this answer

принудительной остановки приложение будет убивать весь процесс (то есть с Process.killProcess (интермедиат PID)). Все ресурсы, связанные с приложением , будут удалены и освобождены ядром. Так нет, нет никакого способа, которым вы можете перехватить это действие

Поэтому лучше использовать обработку ошибок в критических участках кода для обнаружения сбоев.

+0

Я использую UncaughtExceptionHandler, чтобы поймать исключение для сообщений об ошибках при сбое приложения, но когда приложение перестает работать, я не могу ничего сделать, у AudioRecord нет методов для прослушивания каких-либо ошибок. –

+0

Вы выяснили, где проблема – stinepike

+0

У меня нет решения для обработки этой ситуации, звук поврежден. –

1

В принципе, вы не можете этого сделать. Причина в том, что принудительное закрытие системы приложений убивает процесс, и для обработки этого кода больше нет памяти.

Обходным путем было бы зарегистрировать намерения приложений в вашем манифесте и объявить, что этот приемник запускается в другом процессе, добавив андроид: process = "com.test.process". Вы можете запустить сервис в этом ресивере и сделать то, что хотите. Проблема с этим подходом заключалась бы в том, что вы не получаете доступ к исходной памяти приложения, но есть некоторые данные об этом приложении, которые принудительно закрываются внутри дополнительных опций Intent.