Make sure AndroidRendererFrontend exists when accessing it (#3522)
This commit is contained in:
@@ -91,13 +91,24 @@ private:
|
||||
ActorRef<RendererObserver> delegate;
|
||||
};
|
||||
|
||||
AndroidRendererFrontend::AndroidRendererFrontend(MapRenderer& mapRenderer_)
|
||||
AndroidRendererFrontend::AndroidRendererFrontend(Private, MapRenderer& mapRenderer_)
|
||||
: mapRenderer(mapRenderer_),
|
||||
mapRunLoop(util::RunLoop::Get()),
|
||||
updateAsyncTask(std::make_unique<util::AsyncTask>([this]() {
|
||||
mapRenderer.update(std::move(updateParams));
|
||||
mapRenderer.requestRender();
|
||||
})) {}
|
||||
mapRunLoop(util::RunLoop::Get()) {}
|
||||
|
||||
std::shared_ptr<AndroidRendererFrontend> AndroidRendererFrontend::create(MapRenderer& mapRenderer) {
|
||||
auto ptr = std::make_shared<AndroidRendererFrontend>(Private(), mapRenderer);
|
||||
ptr->init();
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void AndroidRendererFrontend::init() {
|
||||
updateAsyncTask = std::make_unique<util::AsyncTask>([weakSelf = weak_from_this()]() {
|
||||
if (auto self = weakSelf.lock()) {
|
||||
self->mapRenderer.update(std::move(self->updateParams));
|
||||
self->mapRenderer.requestRender();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
AndroidRendererFrontend::~AndroidRendererFrontend() = default;
|
||||
|
||||
|
||||
@@ -27,9 +27,17 @@ class AsyncTask;
|
||||
|
||||
namespace android {
|
||||
|
||||
class AndroidRendererFrontend : public RendererFrontend {
|
||||
class AndroidRendererFrontend : public RendererFrontend, public std::enable_shared_from_this<AndroidRendererFrontend> {
|
||||
struct Private {
|
||||
explicit Private() = default;
|
||||
};
|
||||
|
||||
public:
|
||||
AndroidRendererFrontend(MapRenderer&);
|
||||
AndroidRendererFrontend(Private, MapRenderer&);
|
||||
|
||||
static std::shared_ptr<AndroidRendererFrontend> create(MapRenderer&);
|
||||
void init();
|
||||
|
||||
~AndroidRendererFrontend() override;
|
||||
|
||||
void reset() override;
|
||||
|
||||
@@ -75,7 +75,7 @@ NativeMapView::NativeMapView(jni::JNIEnv& _env,
|
||||
}
|
||||
|
||||
// Create a renderer frontend
|
||||
rendererFrontend = std::make_unique<AndroidRendererFrontend>(mapRenderer);
|
||||
rendererFrontend = AndroidRendererFrontend::create(mapRenderer);
|
||||
|
||||
// Create Map options
|
||||
MapOptions options;
|
||||
|
||||
@@ -345,7 +345,7 @@ public:
|
||||
void onSpriteRequested(const std::optional<mbgl::style::Sprite>&) override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<AndroidRendererFrontend> rendererFrontend;
|
||||
std::shared_ptr<AndroidRendererFrontend> rendererFrontend;
|
||||
|
||||
JavaVM* vm = nullptr;
|
||||
jni::WeakReference<jni::Object<NativeMapView>> javaPeer;
|
||||
|
||||
Reference in New Issue
Block a user