uper.onCreate(bundle)
// following same
VLog.log(TAG + ": onCreate");
}
@Override
public void onStart() {
}
@Override
public void onResume() {
}
@Override
public void onStop() {
}
@Override
public void onPause() {
}
@Override
public void onDestroy() {
}
}
这个类只是一个壳,系统会通过ProxyActivity
触发对应的方法的具体实现:
public class ProxyActivity extends Activity {
LifeCircleController mPluginController = new LifeCircleController(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPluginController.onCreate(getIntent().getExtras());
}
@Override
public Resources getResources() {
// construct when loading apk
Resources resources = mPluginController.getResources();
return resources == null ? super.getResources() : resources;
}
@Override
public Resources.Theme getTheme() {
Resources.Theme theme = mPluginController.getTheme();
return theme == null ? super.getTheme() : theme;
}
@Override
public AssetManager getAssets() {
return mPluginController.getAssets();
}
@Override
protected void onStart() {
super.onStart();
mPluginController.onStart();
}
@Override
protected void onResume() {
super.onResume();
mPluginController.onResume();
}
@Override
protected void onStop() {
super.onStop();
mPluginController.onStop();
}
@Override
protected void onPause() {
super.onPause();
mPluginController.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mPluginController.onDestroy();
}
}
这个类是系统实际启动的类,其主要逻辑由LifeCircleController
负责:
public class LifeCircleController implements Pluginable {
Activity mProxy;
PluginActivity mPlugin;
Resources mResources;
Resources.Theme mTheme;
PluginApk mPluginApk;
String mPluginClazz;
public LifeCircleController(Activity activity) {
mProxy = activity;
}
public void onCreate(Bundle bundle) {
mPluginClazz = bundle.getString(Constants.PLUGIN_CLASS_NAME);
String packageName = bundle.getString(Constants.PACKAGE_NAME);
mPluginApk = PluginManager.getInstance().getPluginApk(packageName);
try {
mPlugin = (PluginActivity) loadPluginable(mPluginApk.classLoader, mPluginClazz);
mPlugin.attach(mProxy, mPluginApk);
mResources = mPluginApk.pluginRes;
mPlugin.onCreate(bundle);
} catch (Exception e) {
VLog.log("Fail in LifeCircleController onCreate");
VLog.log(e.getMessage());
e.printStackTrace();
}
}
private Object loadPluginable(ClassLoader classLoader, String pluginActivityClass)
throws Exception {
Class<?> pluginClz = classLoader.loadClass(pluginActivityClass);
Constructor<?> constructor = pluginClz.getConstructor(new Class[] {});
constructor.setAccessible(true);
return constructor.newInstance(new Object[] {});
}
@Override
public void onStart() {
if (mPlugin != null) {
mPlugin.onStart();
}
}
@Override
public void onResume() {
if (mPlugin != null) {
mPlugin.onResume();
}
}
@Override
public void onStop() {
mPlugin.onStop();
}
@Override
public void onPause() {
mPlugin.onPause();
}
@Override
public void onDestroy() {
mPlugin.onDestroy();
}
public Resources getResources() {
return mResources;
}
public Resources.Theme getTheme() {
return mTheme;
}
public AssetManager getAssets() {
return mResources.getAssets();
}
}
有点像Activity源码