diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 230145ae80..58c4a17564 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -1,6 +1,5 @@ package com.mogo.launcher; -import android.app.Application; import android.content.Context; import android.content.Intent; import android.text.TextUtils; @@ -138,14 +137,16 @@ public class MogoApplication extends AbsMogoApplication { @Override protected void init() { super.init(); - prepareBaseService( 2_000L ); + final IMogoServiceApis apis = ARouter.getInstance().navigation( IMogoServiceApis.class ); + prepareBaseService( apis, 2_000L ); +// installSkinManager( this, apis ); } /** * 基础服务:passport、location、socket */ - private void prepareBaseService( long delay ) { - final IMogoServiceApis apis = ARouter.getInstance().navigation( IMogoServiceApis.class ); + private void prepareBaseService( IMogoServiceApis apis, long delay ) { + UiThreadHandler.postDelayed( () -> { // 第三方平台的sn是服务端生成的,所以必须在返回后才能开启 if ( TextUtils.isEmpty( Utils.getSn() ) ) { @@ -157,7 +158,6 @@ public class MogoApplication extends AbsMogoApplication { prepareSocketAndLocationServices( apis ); } }, delay ); - installSkinManager( this, apis ); } private void preparePassportEnvironment( IMogoServiceApis apis, Runnable after ) { @@ -189,10 +189,6 @@ public class MogoApplication extends AbsMogoApplication { } ); } - private void installSkinManager( Application application, IMogoServiceApis apis ) { - apis.getSkinSupportInstallerApi().install( application ); - } - @Override protected void attachBaseContext( Context base ) { super.attachBaseContext( base ); diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java index 27f41aef51..8f165549a0 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java @@ -29,6 +29,7 @@ public abstract class MvpActivity< V extends IView, P extends Presenter< V > > @Override protected void onCreate( @Nullable Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); + beforeSetContentView(savedInstanceState); if ( DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_BYD ) { requestWindowFeature( Window.FEATURE_NO_TITLE ); getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ); @@ -39,6 +40,10 @@ public abstract class MvpActivity< V extends IView, P extends Presenter< V > > getLifecycle().addObserver( mPresenter ); } + protected void beforeSetContentView(Bundle savedInstanceState){ + + } + /** * 布局资源 * diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java index b8055d9cc9..35bb08ad69 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java @@ -5,9 +5,6 @@ import android.util.AttributeSet; import androidx.annotation.Nullable; -import com.amap.api.maps.MapView; -import com.amap.api.navi.AMapNaviView; -import com.mogo.commons.debug.DebugConfig; import com.mogo.map.IMogoMapView; import com.mogo.map.MogoBaseMapView; @@ -19,6 +16,8 @@ import com.mogo.map.MogoBaseMapView; */ public class AMapBaseMapView extends MogoBaseMapView { + private static final String TAG = "AMapBaseMapView"; + public AMapBaseMapView( Context context ) { super( context ); } @@ -33,9 +32,6 @@ public class AMapBaseMapView extends MogoBaseMapView { @Override protected IMogoMapView createMapView( Context context ) { - if ( DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_BYD ) { - return new AMapViewWrapper( new MapView( context ) ); - } - return new AMapNaviViewWrapper( new AMapNaviView( context ) ); + return AMapViewHandler.getMapView(); } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java new file mode 100644 index 0000000000..6bf6a5fc51 --- /dev/null +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java @@ -0,0 +1,37 @@ +package com.mogo.map.impl.amap; + +import android.content.Context; + +import com.amap.api.maps.TextureMapView; +import com.amap.api.navi.AMapNaviView; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.map.IMogoMapView; + +public + +/** + * @author congtaowang + * @since 2020/9/10 + *
+ * 描述
+ */
+class AMapViewHandler {
+
+ private static IMogoMapView sMapView;
+
+ public static void createMapView( Context context ) {
+ if ( DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_SELF_INNOVATE ) {
+ sMapView = new AMapViewWrapper( new TextureMapView( context ) );
+ } else {
+ sMapView = new AMapNaviViewWrapper( new AMapNaviView( context ) );
+ }
+ }
+
+ public static IMogoMapView getMapView() {
+ return sMapView;
+ }
+
+ public static void destroy() {
+ sMapView = null;
+ }
+}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java
index de0604c38f..f346df9a46 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java
@@ -17,6 +17,7 @@ import com.amap.api.maps.AMap;
import com.amap.api.maps.AMapUtils;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
+import com.amap.api.maps.TextureMapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CameraPosition;
import com.amap.api.maps.model.CameraPositionCreator;
@@ -72,7 +73,7 @@ public class AMapViewWrapper implements IMogoMapView,
private static final String TAG = "AMapViewWrapper";
- private final MapView mMapView;
+ private final TextureMapView mMapView;
private IMogoMap mIMap;
private AMapMarkerClickHandler mMarkerClickHandler;
@@ -87,7 +88,7 @@ public class AMapViewWrapper implements IMogoMapView,
.build();
private CarCursorOption mCarCursorOption = DEFAULT_OPTION;
- public AMapViewWrapper( MapView mapView ) {
+ public AMapViewWrapper( TextureMapView mapView ) {
this.mMapView = mapView;
this.mIMap = new AMapWrapper( mMapView.getMap(), mMapView.getContext(), this );
try {
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewInstanceHandler.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewInstanceHandler.java
new file mode 100644
index 0000000000..55d5b23a2f
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewInstanceHandler.java
@@ -0,0 +1,15 @@
+package com.mogo.map;
+
+import android.content.Context;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/9/10
+ *
+ * 描述
+ */
+interface IMogoMapViewInstanceHandler extends IDestroyable {
+
+ void createMapViewInstance( Context context );
+}
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapViewInstanceHandler.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapViewInstanceHandler.java
new file mode 100644
index 0000000000..b3e6bf7a2b
--- /dev/null
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapViewInstanceHandler.java
@@ -0,0 +1,49 @@
+package com.mogo.map;
+
+import android.content.Context;
+
+import com.mogo.map.impl.amap.AMapViewHandler;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/9/10
+ *
+ * 描述
+ */
+class MogoMapViewInstanceHandler implements IMogoMapViewInstanceHandler {
+
+ private static volatile MogoMapViewInstanceHandler sInstance;
+
+ private MogoMapViewInstanceHandler(){}
+
+ public static MogoMapViewInstanceHandler getInstance(){
+ if( sInstance == null ){
+ synchronized( MogoMapViewInstanceHandler.class ) {
+ if( sInstance == null ){
+ sInstance = new MogoMapViewInstanceHandler();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release(){
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ @Override
+ public void createMapViewInstance( Context context ) {
+ AMapViewHandler.createMapView( context );
+ }
+
+ @Override
+ public void destroy() {
+ AMapViewHandler.destroy();
+ }
+}
diff --git a/modules/mogo-module-main/build.gradle b/modules/mogo-module-main/build.gradle
index f02e1cfff6..cec34c9537 100644
--- a/modules/mogo-module-main/build.gradle
+++ b/modules/mogo-module-main/build.gradle
@@ -52,6 +52,7 @@ dependencies {
api rootProject.ext.dependencies.moduleservice
api rootProject.ext.dependencies.moduleapps
api rootProject.ext.dependencies.moduleextensions
+ compileOnly rootProject.ext.dependencies.skinsupport
} else {
api project(":foudations:mogo-utils")
api project(":foudations:mogo-commons")
@@ -62,6 +63,7 @@ dependencies {
api project(':services:mogo-service')
api project(':modules:mogo-module-apps')
api project(':modules:mogo-module-extensions')
+ compileOnly project(':skin:mogo-skin-support')
}
}
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
index 3244b43a83..0c0ef0ba16 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
@@ -73,6 +73,23 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
return R.layout.module_main_activity_main;
}
+ @Override
+ protected void beforeSetContentView( Bundle savedInstanceState ) {
+ init();
+ installSkinManager( savedInstanceState );
+ }
+
+ /**
+ * 安装皮肤支持
+ *
+ * @param savedInstanceState
+ */
+ private void installSkinManager( Bundle savedInstanceState ) {
+ mServiceApis.getMapServiceApi().getMapViewInstanceHandler().createMapViewInstance( this );
+ mServiceApis.getSkinSupportInstallerApi().install( getApplication() );
+ mServiceApis.getSkinSupportInstallerApi().onCompensateActivityCreated( this, savedInstanceState );
+ }
+
@Override
protected void initViews() {
@@ -113,7 +130,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
@Override
protected void onCreate( @Nullable Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
- init();
mPresenter.postLoadModuleMsg();
}
@@ -326,6 +342,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
mMogoMapService = null;
mMogoMapUIController = null;
mMogoFragmentManager = null;
+ mServiceApis.getMapServiceApi().getMapViewInstanceHandler().destroy();
AdasConfigApiController.getInstance().release();
mServiceApis.getAdasControllerApi().release();
Logger.d( TAG, "destroy." );
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java
index 0d47238536..fc0f61d014 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java
@@ -3,6 +3,7 @@ package com.mogo.service.map;
import android.content.Context;
import com.alibaba.android.arouter.facade.template.IProvider;
+import com.mogo.map.IMogoMapViewInstanceHandler;
import com.mogo.map.listener.IMogoHosListenerRegister;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.marker.IMogoMarkerManager;
@@ -111,4 +112,11 @@ public interface IMogoMapService extends IProvider {
* @return
*/
IMogoRoadSearch getRoadSearchApi();
+
+ /**
+ * 地图实例
+ *
+ * @return
+ */
+ IMogoMapViewInstanceHandler getMapViewInstanceHandler();
}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java
index ac8d5c81fb..4038c5533d 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java
@@ -3,15 +3,17 @@ package com.mogo.service.impl.map;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
-import com.mogo.map.MogoRoadSearch;
+import com.mogo.map.IMogoMapViewInstanceHandler;
import com.mogo.map.MogoGeoSearch;
import com.mogo.map.MogoInputtipsSearch;
import com.mogo.map.MogoLocationClient;
import com.mogo.map.MogoMapUIController;
+import com.mogo.map.MogoMapViewInstanceHandler;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.MogoNavi;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.MogoPoiSearch;
+import com.mogo.map.MogoRoadSearch;
import com.mogo.map.listener.IMogoHosListenerRegister;
import com.mogo.map.listener.MogoHosListenerRegister;
import com.mogo.map.location.IMogoLocationClient;
@@ -92,7 +94,13 @@ public class MogoMapService implements IMogoMapService {
return new MogoRoadSearch();
}
+ @Override
+ public IMogoMapViewInstanceHandler getMapViewInstanceHandler() {
+ return MogoMapViewInstanceHandler.getInstance();
+ }
+
@Override
public void init( Context context ) {
}
+
}
diff --git a/skin/mogo-skin-support-impl/src/main/java/com/mogo/skin/support/impl/SkinSupportInstaller.java b/skin/mogo-skin-support-impl/src/main/java/com/mogo/skin/support/impl/SkinSupportInstaller.java
index ab4ffcb3f2..a9b4e2a514 100644
--- a/skin/mogo-skin-support-impl/src/main/java/com/mogo/skin/support/impl/SkinSupportInstaller.java
+++ b/skin/mogo-skin-support-impl/src/main/java/com/mogo/skin/support/impl/SkinSupportInstaller.java
@@ -3,6 +3,7 @@ package com.mogo.skin.support.impl;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
+import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatCallback;
@@ -15,6 +16,7 @@ import com.mogo.skin.support.SkinMode;
import com.mogo.skin.support.SkinSupportInstallerConstants;
import skin.support.SkinCompatManager;
+import skin.support.app.SkinActivityLifecycle;
import skin.support.app.SkinAppCompatViewInflater;
import skin.support.app.SkinCardViewInflater;
import skin.support.constraint.app.SkinConstraintViewInflater;
@@ -60,10 +62,15 @@ class SkinSupportInstaller implements IMogoSkinSupportInstaller {
}
@Override
- public AppCompatDelegate getSkinAppCompatDelegate( AppCompatActivity activity,AppCompatDelegate superDelegate, AppCompatCallback callback ) {
+ public AppCompatDelegate getSkinAppCompatDelegate( AppCompatActivity activity, AppCompatDelegate superDelegate, AppCompatCallback callback ) {
return SkinAppCompatDelegateImpl.get( activity, callback );
}
+ @Override
+ public void onCompensateActivityCreated( Activity activity, Bundle savedInstanceState ) {
+ SkinActivityLifecycle.init( activity.getApplication() ).onCompensateActivityCreated( activity, savedInstanceState );
+ }
+
@Override
public void init( Context context ) {
diff --git a/skin/mogo-skin-support-noop/src/main/java/com/mogo/skin/support/noop/SkinSupportInstaller.java b/skin/mogo-skin-support-noop/src/main/java/com/mogo/skin/support/noop/SkinSupportInstaller.java
index f7d09f1e96..94ab26fbcf 100644
--- a/skin/mogo-skin-support-noop/src/main/java/com/mogo/skin/support/noop/SkinSupportInstaller.java
+++ b/skin/mogo-skin-support-noop/src/main/java/com/mogo/skin/support/noop/SkinSupportInstaller.java
@@ -1,7 +1,9 @@
package com.mogo.skin.support.noop;
+import android.app.Activity;
import android.app.Application;
import android.content.Context;
+import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatCallback;
@@ -40,6 +42,11 @@ class SkinSupportInstaller implements IMogoSkinSupportInstaller {
return superDelegate;
}
+ @Override
+ public void onCompensateActivityCreated( Activity activity, Bundle savedInstanceState ) {
+ Logger.d( TAG, "noop - onCompensateActivityCreated" );
+ }
+
@Override
public void init( Context context ) {
diff --git a/skin/mogo-skin-support/src/main/java/com/mogo/skin/support/IMogoSkinSupportInstaller.java b/skin/mogo-skin-support/src/main/java/com/mogo/skin/support/IMogoSkinSupportInstaller.java
index a6dce85629..0cb5fd30a4 100644
--- a/skin/mogo-skin-support/src/main/java/com/mogo/skin/support/IMogoSkinSupportInstaller.java
+++ b/skin/mogo-skin-support/src/main/java/com/mogo/skin/support/IMogoSkinSupportInstaller.java
@@ -1,6 +1,8 @@
package com.mogo.skin.support;
+import android.app.Activity;
import android.app.Application;
+import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatCallback;
@@ -21,5 +23,7 @@ interface IMogoSkinSupportInstaller extends IProvider {
void loadSkin( SkinMode skinMode );
- AppCompatDelegate getSkinAppCompatDelegate( AppCompatActivity activity,AppCompatDelegate superDelegate, AppCompatCallback callback );
+ AppCompatDelegate getSkinAppCompatDelegate( AppCompatActivity activity, AppCompatDelegate superDelegate, AppCompatCallback callback );
+
+ void onCompensateActivityCreated( Activity activity, Bundle savedInstanceState );
}
diff --git a/skin/skin-support/src/main/java/skin/support/app/SkinActivityLifecycle.java b/skin/skin-support/src/main/java/skin/support/app/SkinActivityLifecycle.java
index 779a87faea..1eb25ffa39 100755
--- a/skin/skin-support/src/main/java/skin/support/app/SkinActivityLifecycle.java
+++ b/skin/skin-support/src/main/java/skin/support/app/SkinActivityLifecycle.java
@@ -26,128 +26,135 @@ import static skin.support.widget.SkinCompatHelper.checkResourceId;
public class SkinActivityLifecycle implements Application.ActivityLifecycleCallbacks {
private static final String TAG = "SkinActivityLifecycle";
private static volatile SkinActivityLifecycle sInstance = null;
- private WeakHashMap