Прежде всего, спасибо за этот замечательный сайт, я нашел много информации, просмотрев ответы на вопросы здесь. есть проблема, однако, я нашел только одно упоминание о (без ответа)
Я пишу приложение, которое использует AudioTrack для зацикливания синусоиды, генерируемой во время выполнения, через разъем для наушников (для управления другой электроникой). Он делает это через определенные промежутки времени (используя Handler.postDelayed), и он работает нормально, за исключением случаев, когда вы принудительно закрываете приложение. В этом случае синусоида продолжает воспроизводиться даже после того, как само приложение давно ушло, и буквально единственное, что я могу сделать, чтобы остановить это, - это перезагрузить телефон.
Звук прекращается, как и должен, если приложение закрыто
Я пробовал:
Я знаю, что использовать Task Killers на Android - не здорово, но многие люди до сих пор это делают, и я не хочу, чтобы телефоны моих пользователей становились непреодолимыми генераторами шума на случай, если мое приложение зависнет и
Вот код, который генерирует синусоидальную волну:
int bufSize = (int)(11025.0 / 60.0); // the number of samples needed for a seamless loop at 60Hz
AT = new AudioTrack(AudioManager.STREAM_MUSIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_8BIT, bufSize, AudioTrack.MODE_STATIC);
byte buffer[] = new byte[bufSize];
float angle = 0.0f;
for (int i=0; i < bufSize; i++){
buffer[i] = (byte)(Math.sin(angle) * 255);
angle += (float)(2*Math.PI) * 60 / 11025;
}
if (AT.write(buffer, 0, bufSize) != bufSize){
log("Error: Couldn't write audio buffer!");
} else {
AT.setLoopPoints(0, bufSize, -1);
AT.play();
}
Хотя я почти уверен, что эта ошибка есть в самом Android, я отчаянно искал способ обнаружить силу, близкую к порядку чтобы запустить последнюю строку кода, чтобы этого не произошло до того, как мое приложение умрет. Я не нашел решения, хотя знаю, что это возможно каким-то образом (у меня есть злобное приложение-будильник, которое оживает, даже если вы убьете его с помощью убийцы задач). Я был бы чрезвычайно признателен, если бы кто-нибудь мог просветить меня!
Я также заметил, что когда мое приложение работает в фоновом режиме и я возвращаюсь к нему (из меню «Недавние приложения» или любым другим способом), кажется как будто каждый раз создается новый экземпляр. Это означает, что вы не можете остановить другой экземпляр, играющий в фоновом режиме - кроме случаев, когда вы используете убийцу задач ... Я уверен, что это должна быть какая-то тривиальная ошибка новичка, которую я совершил, но мне было интересно, может ли это быть связано к синусу смерти.
Запуск Android 2.1.1 на Xperia X10 mini pro.