3
描述需求
简洁地描述下需求。 原来一直使用的是1.24版本,昨天升级到1.28.1后发现app不能正常运行,项目中使用了tinker utils的init方法会调用application的registerActivityLifecycleCallbacks,此时的application是tinkerApplication,在tinkerApplication的onCreate方法中会将"android.app.ActivityThread""android.app.LoadedApk"中的application替换为我自定义的myApplication,所以utils中的ActivityLifecycleCallback将不会调用,导致ActivityUtils中的方法出错。 1.24的初始化方法:
public static void init(final Application app) {
if (sApplication == null) {
if (app == null) {
sApplication = getApplicationByReflect();
} else {
sApplication = app;
}
sApplication.registerActivityLifecycleCallbacks(ACTIVITY_LIFECYCLE);
} else {
if (app != null && app.getClass() != sApplication.getClass()) {
sApplication.unregisterActivityLifecycleCallbacks(ACTIVITY_LIFECYCLE);
ACTIVITY_LIFECYCLE.mActivityList.clear();
sApplication = app;
sApplication.registerActivityLifecycleCallbacks(ACTIVITY_LIFECYCLE);
}
}
}
1.24sApplication有值也可以再次赋值。我会在myApplication中手动再调用一次,ActivityLifecycleCallback会绑定到myApplication.
1.28的初始化方法:
public static void init(final Application app) {
if (sApp != null) return;
sApp = app;
UtilsBridge.init();
}
1.28 sApp有值就不可以赋值。
可借鉴的如果有的话,可以给出一些参考文章、链接、代码 tinker