[androd] - add weak references checks to all jni callbacks
This commit is contained in:
@@ -58,7 +58,10 @@ void MapRenderer::schedule(std::weak_ptr<Mailbox> scheduled) {
|
||||
static auto& javaClass = jni::Class<MapRenderer>::Singleton(*_env);
|
||||
static auto queueEvent = javaClass.GetMethod<void(
|
||||
jni::Object<MapRendererRunnable>)>(*_env, "queueEvent");
|
||||
javaPeer.get(*_env).Call(*_env, queueEvent, peer);
|
||||
auto weakReference = javaPeer.get(*_env);
|
||||
if (weakReference) {
|
||||
weakReference.Call(*_env, queueEvent, peer);
|
||||
}
|
||||
|
||||
// Release the c++ peer as it will be destroyed on GC of the Java Peer
|
||||
runnable.release();
|
||||
@@ -68,7 +71,10 @@ void MapRenderer::requestRender() {
|
||||
android::UniqueEnv _env = android::AttachEnv();
|
||||
static auto& javaClass = jni::Class<MapRenderer>::Singleton(*_env);
|
||||
static auto onInvalidate = javaClass.GetMethod<void()>(*_env, "requestRender");
|
||||
javaPeer.get(*_env).Call(*_env, onInvalidate);
|
||||
auto weakReference = javaPeer.get(*_env);
|
||||
if (weakReference) {
|
||||
weakReference.Call(*_env, onInvalidate);
|
||||
}
|
||||
}
|
||||
|
||||
void MapRenderer::update(std::shared_ptr<UpdateParameters> params) {
|
||||
|
||||
@@ -225,7 +225,10 @@ void NativeMapView::onDidBecomeIdle() {
|
||||
android::UniqueEnv _env = android::AttachEnv();
|
||||
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
|
||||
static auto onDidBecomeIdle = javaClass.GetMethod<void ()>(*_env, "onDidBecomeIdle");
|
||||
javaPeer.get(*_env).Call(*_env, onDidBecomeIdle);
|
||||
auto weakReference = javaPeer.get(*_env);
|
||||
if (weakReference) {
|
||||
weakReference.Call(*_env, onDidBecomeIdle);
|
||||
}
|
||||
}
|
||||
|
||||
void NativeMapView::onDidFinishLoadingStyle() {
|
||||
@@ -501,7 +504,10 @@ void NativeMapView::scheduleSnapshot(jni::JNIEnv&) {
|
||||
// invoke Mapview#OnSnapshotReady
|
||||
static auto& javaClass = jni::Class<NativeMapView>::Singleton(*_env);
|
||||
static auto onSnapshotReady = javaClass.GetMethod<void (jni::Object<Bitmap>)>(*_env, "onSnapshotReady");
|
||||
javaPeer.get(*_env).Call(*_env, onSnapshotReady, bitmap);
|
||||
auto weakReference = javaPeer.get(*_env);
|
||||
if (weakReference) {
|
||||
weakReference.Call(*_env, onSnapshotReady, bitmap);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -89,14 +89,20 @@ void MapSnapshotter::start(JNIEnv& env) {
|
||||
if (err) {
|
||||
// error handler callback
|
||||
static auto onSnapshotFailed = javaClass.GetMethod<void (jni::String)>(*_env, "onSnapshotFailed");
|
||||
javaPeer.get(*_env).Call(*_env, onSnapshotFailed, jni::Make<jni::String>(*_env, util::toString(err)));
|
||||
auto weakReference = javaPeer.get(*_env);
|
||||
if (weakReference) {
|
||||
weakReference.Call(*_env, onSnapshotFailed, jni::Make<jni::String>(*_env, util::toString(err)));
|
||||
}
|
||||
} else {
|
||||
// Create the wrapper
|
||||
auto mapSnapshot = android::MapSnapshot::New(*_env, std::move(image), pixelRatio, attributions, showLogo, pointForFn, latLngForFn);
|
||||
|
||||
// invoke callback
|
||||
static auto onSnapshotReady = javaClass.GetMethod<void (jni::Object<MapSnapshot>)>(*_env, "onSnapshotReady");
|
||||
javaPeer.get(*_env).Call(*_env, onSnapshotReady, mapSnapshot);
|
||||
auto weakReference = javaPeer.get(*_env);
|
||||
if (weakReference) {
|
||||
weakReference.Call(*_env, onSnapshotReady, mapSnapshot);
|
||||
}
|
||||
}
|
||||
|
||||
deactivateFilesource(*_env);
|
||||
|
||||
Reference in New Issue
Block a user