[android] - refactor surface destruction NPE fix
This commit is contained in:
@@ -22,7 +22,6 @@ import android.view.ViewTreeObserver;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ZoomButtonsController;
|
||||
|
||||
import com.mapbox.mapboxsdk.R;
|
||||
import com.mapbox.mapboxsdk.annotations.Annotation;
|
||||
import com.mapbox.mapboxsdk.annotations.MarkerViewManager;
|
||||
@@ -37,7 +36,10 @@ import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings;
|
||||
import com.mapbox.mapboxsdk.net.ConnectivityReceiver;
|
||||
import com.mapbox.mapboxsdk.storage.FileSource;
|
||||
import com.mapbox.services.android.telemetry.MapboxTelemetry;
|
||||
import timber.log.Timber;
|
||||
|
||||
import javax.microedition.khronos.egl.EGLConfig;
|
||||
import javax.microedition.khronos.opengles.GL10;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayList;
|
||||
@@ -45,11 +47,6 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import javax.microedition.khronos.egl.EGLConfig;
|
||||
import javax.microedition.khronos.opengles.GL10;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
import static com.mapbox.mapboxsdk.maps.widgets.CompassView.TIME_MAP_NORTH_ANIMATION;
|
||||
import static com.mapbox.mapboxsdk.maps.widgets.CompassView.TIME_WAIT_IDLE;
|
||||
|
||||
@@ -296,55 +293,43 @@ public class MapView extends FrameLayout {
|
||||
mapRenderer = new TextureViewMapRenderer(getContext(), textureView, options.getLocalIdeographFontFamily()) {
|
||||
@Override
|
||||
protected void onSurfaceCreated(GL10 gl, EGLConfig config) {
|
||||
MapView.this.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// Initialise only once
|
||||
if (mapboxMap == null) {
|
||||
initialiseMap();
|
||||
mapboxMap.onStart();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
initRenderSurface();
|
||||
super.onSurfaceCreated(gl, config);
|
||||
}
|
||||
};
|
||||
|
||||
addView(textureView, 0);
|
||||
} else {
|
||||
GLSurfaceView glSurfaceView = (GLSurfaceView) findViewById(R.id.surfaceView);
|
||||
glSurfaceView.setZOrderMediaOverlay(mapboxMapOptions.getRenderSurfaceOnTop());
|
||||
|
||||
mapRenderer = new GLSurfaceViewMapRenderer(getContext(), glSurfaceView, options.getLocalIdeographFontFamily()) {
|
||||
@Override
|
||||
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
|
||||
MapView.this.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// There is no guarantee that onDestroy will not be called before the surface is created
|
||||
if (destroyed) {
|
||||
return;
|
||||
}
|
||||
// Initialise only once
|
||||
if (mapboxMap == null) {
|
||||
initialiseMap();
|
||||
mapboxMap.onStart();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
initRenderSurface();
|
||||
super.onSurfaceCreated(gl, config);
|
||||
}
|
||||
};
|
||||
|
||||
glSurfaceView.setVisibility(View.VISIBLE);
|
||||
|
||||
}
|
||||
|
||||
nativeMapView = new NativeMapView(this, mapRenderer);
|
||||
nativeMapView.resizeView(getMeasuredWidth(), getMeasuredHeight());
|
||||
}
|
||||
|
||||
private void initRenderSurface() {
|
||||
post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// Initialise only when not destroyed and only once
|
||||
if (!destroyed && mapboxMap == null) {
|
||||
initialiseMap();
|
||||
mapboxMap.onStart();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* You must call this method from the parent's Activity#onSaveInstanceState(Bundle)
|
||||
* or Fragment#onSaveInstanceState(Bundle).
|
||||
|
||||
Reference in New Issue
Block a user