Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
[Android] Handle native thread finishing when not commanded from the …
- Loading branch information
|
@@ -26,6 +26,7 @@ |
|
|
|
|
|
// Keep track of the paused state |
|
|
public static boolean mIsPaused = false, mIsSurfaceReady = false, mHasFocus = true; |
|
|
public static boolean mExitCalledFromJava; |
|
|
|
|
|
// Main components |
|
|
protected static SDLActivity mSingleton; |
|
@@ -63,6 +64,9 @@ protected void onCreate(Bundle savedInstanceState) { |
|
|
// Set up the surface |
|
|
mSurface = new SDLSurface(getApplication()); |
|
|
|
|
|
// Make sure this variable is initialized here! |
|
|
mExitCalledFromJava = false; |
|
|
|
|
|
if(Build.VERSION.SDK_INT >= 12) { |
|
|
mJoystickHandler = new SDLJoystickHandler_API12(); |
|
|
} |
|
@@ -115,6 +119,7 @@ protected void onDestroy() { |
|
|
super.onDestroy(); |
|
|
Log.v("SDL", "onDestroy()"); |
|
|
// Send a quit message to the application |
|
|
SDLActivity.mExitCalledFromJava = true; |
|
|
SDLActivity.nativeQuit(); |
|
|
|
|
|
// Now wait for the SDL thread to quit |
|
@@ -168,6 +173,12 @@ public static void handleResume() { |
|
|
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true); |
|
|
} |
|
|
} |
|
|
|
|
|
/* The native thread has finished */ |
|
|
public static void handleNativeExit() { |
|
|
SDLActivity.mSDLThread = null; |
|
|
mSingleton.finish(); |
|
|
} |
|
|
|
|
|
|
|
|
// Messages from the SDLMain thread |
|
@@ -616,6 +627,22 @@ public void surfaceChanged(SurfaceHolder holder, |
|
|
SDLActivity.mSDLThread = new Thread(new SDLMain(), "SDLThread"); |
|
|
enableSensor(Sensor.TYPE_ACCELEROMETER, true); |
|
|
SDLActivity.mSDLThread.start(); |
|
|
|
|
|
// Set up a listener thread to catch when the native thread ends |
|
|
new Thread(new Runnable(){ |
|
|
public void run(){ |
|
|
try { |
|
|
SDLActivity.mSDLThread.join(); |
|
|
} |
|
|
catch(Exception e){} |
|
|
finally{ |
|
|
// Native thread has finished |
|
|
if (! SDLActivity.mExitCalledFromJava) { |
|
|
SDLActivity.handleNativeExit(); |
|
|
} |
|
|
} |
|
|
} |
|
|
}).start(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
@@ -425,11 +425,7 @@ main(int argc, char *argv[]) |
|
|
} |
|
|
SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); |
|
|
|
|
|
#ifdef ANDROID |
|
|
exit(0); |
|
|
#else |
|
|
return 0; |
|
|
#endif |
|
|
} |
|
|
|
|
|
#else |
|
|
|
@@ -287,11 +287,6 @@ main(int argc, char *argv[]) |
|
|
} |
|
|
SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); |
|
|
|
|
|
#ifdef ANDROID |
|
|
exit(0); |
|
|
#else |
|
|
return 0; |
|
|
#endif |
|
|
} |
|
|
|
|
|
#else |
|
|