Description
宿主里要启动插件的service, 在类ServcesManager的onStart()里没有判断PluginManager.getInstance().isConnected(), 需要同步这个状态. 因为在宿主里[判断这个值智能代表宿主进程的这个值, 一旦插件进程启动, 需要在新的进程里判断这个值, 否则此次调用startService不会被传递下去 修改前: public int onStart(Context context, Intent intent, int flags, int startId) throws Exception { new Throwable().printStackTrace(); Intent targetIntent = intent.getParcelableExtra(Env.EXTRA_TARGET_INTENT); if (targetIntent != null) { ServiceInfo targetInfo = PluginManager.getInstance().resolveServiceInfo(targetIntent, 0); if (targetInfo != null) { Service service = mNameService.get(targetInfo.name); if (service == null) { handleCreateServiceOne(context, intent, targetInfo); } handleOnStartOne(targetIntent, flags, startId); } } return -1; }
修改后 public int onStart(Context context, Intent intent, int flags, int startId) throws Exception { Log.i(TAG, "onStart()"); Intent targetIntent = intent.getParcelableExtra(Env.EXTRA_TARGET_INTENT); if (targetIntent != null) { if (PluginManager.getInstance().isConnected()) { Log.i(TAG, "onStart(), PluginManager isConnected!"); forwardStartService(context, intent, flags, startId, targetIntent); } else { Log.i(TAG, "onStart(), PluginManager is NOT connected!"); waitAndStart(context, intent, flags, startId, targetIntent); } } return -1; }
private void forwardStartService(Context context, Intent intent, int flags, int startId, Intent targetIntent) throws Exception { Log.i(TAG, "forwardStartService()"); ServiceInfo targetInfo = PluginManager.getInstance().resolveServiceInfo(targetIntent, 0); if (targetInfo != null) { Service service = mNameService.get(targetInfo.name); if (service == null) { handleCreateServiceOne(context, intent, targetInfo); } handleOnStartOne(targetIntent, flags, startId); } else { Log.i(TAG, "onStart(), ============ServiceInfo is NULL, cannot startService!!!"); } }