Fixed hanging after onDestroy() on Android

This commit is contained in:
Sam Lantinga 2024-07-25 07:33:42 -07:00
parent 9826f73230
commit e9a7014e56

View file

@ -97,6 +97,24 @@ void Android_InitEvents(void)
}
}
static void Android_PauseAudio(void)
{
ANDROIDAUDIO_PauseDevices();
OPENSLES_PauseDevices();
AAUDIO_PauseDevices();
Android_PausedAudio = SDL_TRUE;
}
static void Android_ResumeAudio(void)
{
if (Android_PausedAudio) {
ANDROIDAUDIO_ResumeDevices();
OPENSLES_ResumeDevices();
AAUDIO_ResumeDevices();
Android_PausedAudio = SDL_FALSE;
}
}
static void Android_OnPause(void)
{
SDL_OnApplicationWillEnterBackground();
@ -117,10 +135,7 @@ static void Android_OnPause(void)
if (Android_BlockOnPause) {
/* We're blocking, also pause audio */
ANDROIDAUDIO_PauseDevices();
OPENSLES_PauseDevices();
AAUDIO_PauseDevices();
Android_PausedAudio = SDL_TRUE;
Android_PauseAudio();
}
Android_Paused = SDL_TRUE;
@ -132,11 +147,7 @@ static void Android_OnResume(void)
SDL_OnApplicationWillEnterForeground();
if (Android_PausedAudio) {
ANDROIDAUDIO_ResumeDevices();
OPENSLES_ResumeDevices();
AAUDIO_ResumeDevices();
}
Android_ResumeAudio();
#ifdef SDL_VIDEO_OPENGL_EGL
/* Restore the GL Context from here, as this operation is thread dependent */
@ -162,6 +173,9 @@ static void Android_OnLowMemory(void)
static void Android_OnDestroy(void)
{
/* Make sure we unblock any audio processing before we quit */
Android_ResumeAudio();
/* Discard previous events. The user should have handled state storage
* in SDL_EVENT_WILL_ENTER_BACKGROUND. After nativeSendQuit() is called, no
* events other than SDL_EVENT_QUIT and SDL_EVENT_TERMINATING should fire */
@ -212,7 +226,8 @@ void Android_PumpEvents(Sint64 timeoutNS)
SDL_AndroidLifecycleEvent event;
SDL_bool paused = Android_Paused;
while (Android_WaitLifecycleEvent(&event, GetLifecycleEventTimeout(paused, timeoutNS))) {
while (!Android_Destroyed &&
Android_WaitLifecycleEvent(&event, GetLifecycleEventTimeout(paused, timeoutNS))) {
Android_HandleLifecycleEvent(event);
switch (event) {