初始化分析
初始化主要做了以下几件事:
读取配置信息appId、channeId,既可通过代码设置appId、channelId,也可以在manifest中设置;如果两个都设置的话,优先以AndroidManifest.xml为主;
Hook系统函数,监听Activity生命周期;
Android 4.0及以后版本,只需要向mActivityLifecycleCallbacks 添加一个callback即可
public class Application extends ContextWrapper implements ComponentCallbacks2 {
private ArrayList<ComponentCallbacks> mComponentCallbacks =
new ArrayList<ComponentCallbacks>();
private ArrayList<ActivityLifecycleCallbacks> mActivityLifecycleCallbacks =
new ArrayList<ActivityLifecycleCallbacks>();
private ArrayList<OnProvideAssistDataListener> mAssistCallbacks = null;
/** @hide */
public LoadedApk mLoadedApk;
public interface ActivityLifecycleCallbacks {
void onActivityCreated(Activity activity, Bundle savedInstanceState);
void onActivityStarted(Activity activity);
void onActivityResumed(Activity activity);
void onActivityPaused(Activity activity);
void onActivityStopped(Activity activity);
void onActivitySaveInstanceState(Activity activity, Bundle outState);
void onActivityDestroyed(Activity activity);
}
}
android4.0之前,需要Hook ActivityManagerNative,这是一个很有用的类,android插件化、热更新也会hook这个类;说到插件化,个人感觉还是360做得比较好,基本上完全解耦了,不需要任何依赖就可以加载apk,但要hook的系统类比较多,还需要对各种版本兼容,甚至不同的rom兼容,难度和工作量都是比较大的,但对我们了解apk的启动与安装有很大帮助;