]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/android/mainthread.cpp
Deal with the activity being recreated during process lifetime
[libs/core.git] / source / core / android / mainthread.cpp
index e07c837bcfdb15706f33e62baa98eeb1b82b26db..1e5fc1198072ef48cc84c48fead2436bcba3e39b 100644 (file)
@@ -10,19 +10,23 @@ namespace Msp {
 namespace Android {
 
 MainThread::MainThread(ANativeActivity *a):
 namespace Android {
 
 MainThread::MainThread(ANativeActivity *a):
-       activity(a),
        starting_up(true)
 {
        starting_up(true)
 {
+       attach_to_activity(a);
+       startup_mutex.lock();
+       launch();
+}
+
+void MainThread::attach_to_activity(ANativeActivity *a)
+{
+       activity = a;
+       activity->callbacks->onDestroy = &activity_destroyed;
        activity->callbacks->onNativeWindowCreated = &native_window_created;
        activity->callbacks->onNativeWindowResized = &native_window_resized;
        activity->callbacks->onNativeWindowDestroyed = &native_window_destroyed;
        activity->callbacks->onInputQueueCreated = &input_queue_created;
        activity->callbacks->onInputQueueDestroyed = &input_queue_destroyed;
        activity->instance = this;
        activity->callbacks->onNativeWindowCreated = &native_window_created;
        activity->callbacks->onNativeWindowResized = &native_window_resized;
        activity->callbacks->onNativeWindowDestroyed = &native_window_destroyed;
        activity->callbacks->onInputQueueCreated = &input_queue_created;
        activity->callbacks->onInputQueueDestroyed = &input_queue_destroyed;
        activity->instance = this;
-
-       startup_mutex.lock();
-
-       launch();
 }
 
 void MainThread::wait_for_app_created()
 }
 
 void MainThread::wait_for_app_created()
@@ -48,7 +52,8 @@ void MainThread::main()
        Msp::Android::ErrorLogger err_logger;
        Msp::Application::run(1, argv, this, &app_created);
        free(appname);
        Msp::Android::ErrorLogger err_logger;
        Msp::Application::run(1, argv, this, &app_created);
        free(appname);
-       ANativeActivity_finish(activity);
+       if(activity)
+               ANativeActivity_finish(activity);
 }
 
 void MainThread::app_created(void *data)
 }
 
 void MainThread::app_created(void *data)
@@ -56,6 +61,11 @@ void MainThread::app_created(void *data)
        reinterpret_cast<MainThread *>(data)->resume_startup();
 }
 
        reinterpret_cast<MainThread *>(data)->resume_startup();
 }
 
+void MainThread::activity_destroyed(ANativeActivity *activity)
+{
+       reinterpret_cast<MainThread *>(activity->instance)->activity = 0;
+}
+
 void MainThread::native_window_created(ANativeActivity *activity, ANativeWindow *window)
 {
        reinterpret_cast<MainThread *>(activity->instance)->signal_native_window_created.emit(window);
 void MainThread::native_window_created(ANativeActivity *activity, ANativeWindow *window)
 {
        reinterpret_cast<MainThread *>(activity->instance)->signal_native_window_created.emit(window);