优化卡片滑动性能:探路视频播放、C位事件逻辑;定制化app列表;修改小智动画策略;其他优化;

This commit is contained in:
wangcongtao
2020-02-12 17:57:53 +08:00
parent c6a258e9c6
commit 62614236b2
17 changed files with 563 additions and 163 deletions

View File

@@ -307,7 +307,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
private void startLocation() {
mLocationClient = mMogoMapService.getSingletonLocationClient( getApplicationContext() );
mLocationClient.addLocationListener( this );
mLocationClient.start();
mLocationClient.start(10_000L);
}
private void loadContainerModules() {

View File

@@ -1,13 +1,10 @@
package com.mogo.module.main.cards;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.text.TextUtils;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
@@ -29,9 +26,11 @@ import com.mogo.module.extensions.ExtensionsModuleConst;
import com.mogo.module.main.MainActivity;
import com.mogo.module.main.assist.MapBroadCastHelper;
import com.mogo.module.main.registercenter.MogoRegisterCenterHandler;
import com.mogo.module.service.receiver.MogoReceiver;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;
@@ -58,24 +57,26 @@ import java.util.Map;
public class MogoModulesManager implements MogoModulesHandler,
IMogoMapListener,
IMogoNaviListener,
IMogoLocationListener {
IMogoLocationListener,
IMogoIntentListener {
private static final String TAG = "MogoModulesManager";
private MainActivity mActivity;
private Map< MogoModule, IMogoModuleProvider > mModuleProviders = new HashMap<>();
// 空间换效率
private Map< String, IMogoModuleProvider > mModuleNameProviders = new HashMap<>();
private IMogoAnalytics mTrackManager;
private IMogoMapService mapService;
private String mEnableModuleName = null;
private Runnable mMapLoadedCallback;
private BroadcastReceiver mReceiver;
public static final String KEY_SORTED_CARD_MODULES = "sortedCards";
private List< String > mSortedCards = new ArrayList<>();
private IMogoIntentManager mMogoIntentManager;
public MogoModulesManager( MainActivity activity ) {
if ( activity == null ) {
throw new NullPointerException( "activity can't be null." );
@@ -85,9 +86,9 @@ public class MogoModulesManager implements MogoModulesHandler,
.build( MogoServicePaths.PATH_UTILS_ANALYTICS )
.navigation();
mapService = ( IMogoMapService ) ARouter.getInstance().build(
MogoServicePaths.PATH_SERVICES_MAP
).navigation();
mMogoIntentManager = ( IMogoIntentManager ) ARouter.getInstance()
.build( MogoServicePaths.PATH_INTENT_MANAGER )
.navigation();
registerReceiver();
}
@@ -108,6 +109,7 @@ public class MogoModulesManager implements MogoModulesHandler,
IMogoModuleProvider provider = load( module.getPath() );
if ( provider != null ) {
mModuleProviders.put( module, provider );
mModuleNameProviders.put( module.getName(), provider );
}
}
}
@@ -236,50 +238,34 @@ public class MogoModulesManager implements MogoModulesHandler,
// 仅操作上一个模块和当前模块
Iterator< IMogoModuleProvider > iterator = mModuleProviders.values().iterator();
int counter = 0;
while ( iterator.hasNext() ) {
IMogoModuleProvider provider = iterator.next();
if ( provider == null ) {
continue;
}
if ( provider.getType() != ModuleType.TYPE_CARD_FRAGMENT ) {
continue;
}
if ( TextUtils.equals( mEnableModuleName, provider.getModuleName() ) ) {
final IMogoModuleLifecycle lifecycle =
MogoRegisterCenterHandler.getInstance().getLifecycleListener( mEnableModuleName );
if ( lifecycle != null ) {
try {
final long start = System.currentTimeMillis();
lifecycle.onDisable();
Logger.i( TAG,
"set %s module disable event cost " + ( System.currentTimeMillis()
- start ) + "ms", mEnableModuleName );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
// 上一个卡片设置为 disable
IMogoModuleProvider prev = mModuleNameProviders.get( mEnableModuleName );
if ( prev != null ) {
final IMogoModuleLifecycle lifecycle = MogoRegisterCenterHandler.getInstance().getLifecycleListener( mEnableModuleName );
if ( lifecycle != null ) {
try {
final long start = System.currentTimeMillis();
lifecycle.onDisable();
Logger.i( TAG, "set %s module disable event cost " + ( System.currentTimeMillis() - start ) + "ms", mEnableModuleName );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
counter++;
continue;
}
if ( TextUtils.equals( module, provider.getModuleName() ) ) {
final IMogoModuleLifecycle lifecycle =
MogoRegisterCenterHandler.getInstance().getLifecycleListener( module );
if ( lifecycle != null ) {
try {
final long start = System.currentTimeMillis();
lifecycle.onPerform();
Logger.i( TAG,
"set %s module perform event cost " + ( System.currentTimeMillis()
- start ) + "ms", module );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
}
// 当前卡片设置为 perform
IMogoModuleProvider current = mModuleNameProviders.get( module );
if ( current != null ) {
final IMogoModuleLifecycle lifecycle = MogoRegisterCenterHandler.getInstance().getLifecycleListener( module );
if ( lifecycle != null ) {
try {
final long start = System.currentTimeMillis();
lifecycle.onPerform();
Logger.i( TAG, "set %s module perform event cost " + ( System.currentTimeMillis() - start ) + "ms", module );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
counter++;
continue;
}
if ( counter == 2 ) {
break;
}
}
@@ -287,7 +273,7 @@ public class MogoModulesManager implements MogoModulesHandler,
mSortedCards.remove( mEnableModuleName );
mSortedCards.add( 0, mEnableModuleName );
SharedPrefsMgr.getInstance( getContext() ).putString( KEY_SORTED_CARD_MODULES, GsonUtil.jsonFromObject( mSortedCards ) );
Log.i(TAG, "enable & disable card cost " + (System.currentTimeMillis() - start1) + "ms");
Log.i( TAG, "enable & disable card cost " + ( System.currentTimeMillis() - start1 ) + "ms" );
}
@Override
@@ -300,8 +286,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onTouch( MotionEvent motionEvent ) {
Iterator< IMogoMapListener > iterator =
MogoRegisterCenterHandler.getInstance().getMapListeners();
Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners();
if ( iterator == null ) {
return;
}
@@ -319,8 +304,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onPOIClick( MogoPoi poi ) {
Iterator< IMogoMapListener > iterator =
MogoRegisterCenterHandler.getInstance().getMapListeners();
Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners();
if ( iterator == null ) {
return;
}
@@ -338,8 +322,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onMapClick( MogoLatLng latLng ) {
Iterator< IMogoMapListener > iterator =
MogoRegisterCenterHandler.getInstance().getMapListeners();
Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners();
if ( iterator == null ) {
return;
}
@@ -357,8 +340,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onLockMap( boolean isLock ) {
Iterator< IMogoMapListener > iterator =
MogoRegisterCenterHandler.getInstance().getMapListeners();
Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners();
if ( iterator == null ) {
return;
}
@@ -376,8 +358,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onMapModeChanged( EnumMapUI ui ) {
Iterator< IMogoMapListener > iterator =
MogoRegisterCenterHandler.getInstance().getMapListeners();
Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners();
if ( iterator == null ) {
return;
}
@@ -395,8 +376,9 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onMapChanged( MogoLatLng location, float zoom, float tilt, float bearing ) {
Iterator< IMogoMapListener > iterator =
MogoRegisterCenterHandler.getInstance().getMapListeners();
final long start = System.currentTimeMillis();
Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners();
if ( iterator == null ) {
return;
}
@@ -410,12 +392,12 @@ public class MogoModulesManager implements MogoModulesHandler,
}
}
}
Log.i( TAG, "onMapChanged event cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
@Override
public void onInitNaviFailure() {
Iterator< IMogoNaviListener > iterator =
MogoRegisterCenterHandler.getInstance().getNaviListeners();
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
}
@@ -433,8 +415,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onInitNaviSuccess() {
Iterator< IMogoNaviListener > iterator =
MogoRegisterCenterHandler.getInstance().getNaviListeners();
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
}
@@ -453,8 +434,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) {
MapBroadCastHelper.getInstance( getApplicationContext() ).notifyXiaozhi( naviinfo );
Iterator< IMogoNaviListener > iterator =
MogoRegisterCenterHandler.getInstance().getNaviListeners();
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
@@ -473,8 +453,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onStartNavi() {
Iterator< IMogoNaviListener > iterator =
MogoRegisterCenterHandler.getInstance().getNaviListeners();
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
mTrackManager.track( "Navigation_begin", new HashMap<>() );
MapBroadCastHelper.getInstance( getApplicationContext() ).startNavi();
@@ -497,8 +476,7 @@ public class MogoModulesManager implements MogoModulesHandler,
public void onStopNavi() {
mTrackManager.track( "Navigation_end", new HashMap<>() );
MapBroadCastHelper.getInstance( getApplicationContext() ).stopNavi();
Iterator< IMogoNaviListener > iterator =
MogoRegisterCenterHandler.getInstance().getNaviListeners();
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
}
@@ -516,8 +494,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onCalculateSuccess() {
Iterator< IMogoNaviListener > iterator =
MogoRegisterCenterHandler.getInstance().getNaviListeners();
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
}
@@ -535,8 +512,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onoCalculateFailed() {
Iterator< IMogoNaviListener > iterator =
MogoRegisterCenterHandler.getInstance().getNaviListeners();
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
}
@@ -554,8 +530,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
Iterator< IMogoNaviListener > iterator =
MogoRegisterCenterHandler.getInstance().getNaviListeners();
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
}
@@ -573,8 +548,8 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onLocationChanged( MogoLocation location ) {
Iterator< IMogoLocationListener > iterator =
MogoRegisterCenterHandler.getInstance().getLocationListeners();
final long start = System.currentTimeMillis();
Iterator< IMogoLocationListener > iterator = MogoRegisterCenterHandler.getInstance().getLocationListeners();
if ( iterator == null ) {
return;
}
@@ -588,40 +563,51 @@ public class MogoModulesManager implements MogoModulesHandler,
}
}
}
Log.i( TAG, "onLocationChanged event cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
public void registerReceiver() {
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive( Context context, Intent intent ) {
final String action = intent.getAction();
if ( TextUtils.equals( action, Intent.ACTION_POWER_CONNECTED ) ) {
Iterator< IMogoModuleLifecycle > iterator =
MogoRegisterCenterHandler.getInstance().getLifecycleListeners();
if ( iterator.hasNext() ) {
iterator.next().accOn();
}
} else if ( TextUtils.equals( action, Intent.ACTION_POWER_DISCONNECTED ) ) {
mMogoIntentManager.registerIntentListener( Intent.ACTION_POWER_CONNECTED, this );
mMogoIntentManager.registerIntentListener( Intent.ACTION_POWER_DISCONNECTED, this );
mMogoIntentManager.registerIntentListener( MogoReceiver.ACTION_NWD_ACC, this );
}
@Override
public void onIntentReceived( String intentStr, Intent intent ) {
Iterator< IMogoModuleLifecycle > iterator = MogoRegisterCenterHandler.getInstance().getLifecycleListeners();
if ( Intent.ACTION_POWER_CONNECTED.equals( intentStr ) ) {
while ( iterator.hasNext() ) {
IMogoModuleLifecycle lifecycle = iterator.next();
if ( lifecycle != null ) {
lifecycle.accOn();
}
}
};
IntentFilter inputFilter = new IntentFilter();
inputFilter.addAction( Intent.ACTION_POWER_CONNECTED );
inputFilter.addAction( Intent.ACTION_POWER_DISCONNECTED );
getApplicationContext().registerReceiver( mReceiver, inputFilter );
} else if ( Intent.ACTION_POWER_DISCONNECTED.equals( intentStr ) ) {
} else if ( MogoReceiver.ACTION_NWD_ACC.equals( intentStr ) ) {
int state = intent.getByteExtra( MogoReceiver.PARAM_ACC_STATUS, ( byte ) 0 );
if ( state == 1 ) {
while ( iterator.hasNext() ) {
IMogoModuleLifecycle lifecycle = iterator.next();
if ( lifecycle != null ) {
lifecycle.accOn();
}
}
}
}
if ( iterator.hasNext() ) {
iterator.next().accOn();
}
}
@Override
public void destroy() {
if ( mReceiver != null ) {
try {
getApplicationContext().unregisterReceiver( mReceiver );
} catch ( Exception e ) {
e.printStackTrace();
}
if ( mMogoIntentManager != null ) {
mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_CONNECTED );
mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_DISCONNECTED );
mMogoIntentManager.unregisterIntentListener( MogoReceiver.ACTION_NWD_ACC );
}
mReceiver = null;
mActivity = null;
if ( mModuleProviders != null ) {
mModuleProviders.clear();
@@ -633,8 +619,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public boolean onMarkerClicked( IMogoMarker marker ) {
IMogoMarkerClickListener listener =
MogoRegisterCenterHandler.getInstance().getMarkerListener( marker.getOwner() );
IMogoMarkerClickListener listener = MogoRegisterCenterHandler.getInstance().getMarkerListener( marker.getOwner() );
if ( listener != null ) {
try {
return listener.onMarkerClicked( marker );