diff --git a/platform/android/src/run_loop.cpp b/platform/android/src/run_loop.cpp index 7a28a6139..591cb31fd 100644 --- a/platform/android/src/run_loop.cpp +++ b/platform/android/src/run_loop.cpp @@ -36,9 +36,15 @@ int looperCallbackDefault(int fd, int, void* data) { int buffer[1]; while (read(fd, buffer, sizeof(buffer)) > 0) {} - auto runLoop = reinterpret_cast(data); + auto runLoopImpl = reinterpret_cast(data); + auto runLoop = runLoopImpl->runLoop; + runLoop->runOnce(); + if (!runLoopImpl->running) { + ALooper_wake(runLoopImpl->loop); + } + return 1; } @@ -47,7 +53,7 @@ int looperCallbackDefault(int fd, int, void* data) { namespace mbgl { namespace util { -RunLoop::Impl::Impl(RunLoop* runLoop, RunLoop::Type type) { +RunLoop::Impl::Impl(RunLoop* runLoop_, RunLoop::Type type) : runLoop(runLoop_) { using namespace mbgl::android; detach = attach_jni_thread(theJVM, &env, ""); @@ -73,7 +79,7 @@ RunLoop::Impl::Impl(RunLoop* runLoop, RunLoop::Type type) { break; case Type::Default: ret = ALooper_addFd(loop, fds[PIPE_OUT], ALOOPER_POLL_CALLBACK, - ALOOPER_EVENT_INPUT, looperCallbackDefault, runLoop); + ALOOPER_EVENT_INPUT, looperCallbackDefault, this); break; } diff --git a/platform/android/src/run_loop_impl.hpp b/platform/android/src/run_loop_impl.hpp index d855728b6..1ca3dbc61 100644 --- a/platform/android/src/run_loop_impl.hpp +++ b/platform/android/src/run_loop_impl.hpp @@ -38,6 +38,10 @@ public: Milliseconds processRunnables(); + ALooper* loop = nullptr; + RunLoop* runLoop = nullptr; + util::Atomic running; + private: friend RunLoop; @@ -46,9 +50,6 @@ private: JNIEnv *env = nullptr; bool detach = false; - ALooper* loop = nullptr; - util::Atomic running; - std::recursive_mutex mtx; std::list runnables; };