Android-Skin-Loader 换肤框架不支持多个activity同时换肤问题处理
在工作中由于有一个应用多个acctivity显示的情况,但是框架不支持多个activity同时刷新,查看代码发现是LazySkinObserver这里有限制
解决方法:
在换肤方法调用之前增加反射方式将 mCurActivityRef 赋值为null让其强行走updateSkinForce方法 即可
下面是反射的修改方法:
public static void resetCurActivityRef() {
try {
Class<?> clazz = SkinActivityLifecycle.class;
// 先获取 sInstance(静态变量)
Field instanceField = clazz.getDeclaredField("sInstance");
instanceField.setAccessible(true);
Object sInstance = instanceField.get(null);
if (sInstance != null) {
// 获取 mCurActivityRef(实例变量)
Field field = clazz.getDeclaredField("mCurActivityRef");
field.setAccessible(true);
field.set(sInstance, null);
AppLog.d(TAG, "mCurActivityRef 已成功设为 null");
} else {
AppLog.e(TAG, "sInstance 为 null,无法重置 mCurActivityRef");
}
} catch (Exception e) {
e.printStackTrace();
}
}