「Update」

1、修复杀掉应用后无法生效的问题;
2、增加注释
This commit is contained in:
donghongyu
2024-10-23 17:10:54 +08:00
parent 5c42a78ce2
commit 5c94b004ef
4 changed files with 47 additions and 23 deletions

View File

@@ -78,6 +78,7 @@ public class SkinManager extends Observable {
Log.d(TAG, "加载皮肤路径:" + skinPath);
if (TextUtils.isEmpty(skinPath)) {
Log.d(TAG, "还原默认皮肤包,开始换肤……");
//还原默认皮肤包
SkinPreference.getInstance().setSkin("");
SkinResources.getInstance().reset();
@@ -90,18 +91,18 @@ public class SkinManager extends Observable {
// 加载指定目录下的皮肤
else {
// 判断是否已经加载同样皮肤如果已经加载则不再重复加载防止因为重复加载导致ImageView之类的设置了src、background的控件被重制
if (!SkinPreference.getInstance().getSkin().equals(skinPath)) {
try {
//反射创建AssetManager 与 Resource
AssetManager assetManager = AssetManager.class.newInstance();
// 资源路径设置 目录或压缩包
Method addAssetPath = assetManager.getClass().getMethod("addAssetPath", String.class);
addAssetPath.setAccessible(true);
int result = (int) addAssetPath.invoke(assetManager, skinPath);
if (result == 0) {
Log.e(TAG, "加载皮肤APK失败" + skinPath);
}
try {
Log.d(TAG, "切换的皮肤与之前不一样,开始换肤……");
//反射创建AssetManager 与 Resource
AssetManager assetManager = AssetManager.class.newInstance();
// 资源路径设置 目录或压缩包
Method addAssetPath = assetManager.getClass().getMethod("addAssetPath", String.class);
addAssetPath.setAccessible(true);
int result = (int) addAssetPath.invoke(assetManager, skinPath);
if (result == 0) {
Log.e(TAG, "加载皮肤APK失败" + skinPath);
} else {
Log.d(TAG, "加载皮肤APK成功" + skinPath);
// 获取当前Resources
Resources resources = application.getResources();
//根据当前的设备显示器信息 与 配置(横竖屏、语言等) 创建Resources
@@ -120,11 +121,9 @@ public class SkinManager extends Observable {
setChanged();
//通知观察者
notifyObservers();
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.e(TAG, "皮肤已存在,开始换肤……");
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -147,7 +146,7 @@ public class SkinManager extends Observable {
File skinFile = skin.getSkinFile(theme);
// 判断是否存在
if (skinFile.exists()) {
Log.e(TAG, "皮肤已存在,开始换肤……skin=" + skin);
Log.d(TAG, "皮肤已存在,开始换肤……skin=" + skin);
SkinManager.getInstance().loadSkin(skin.getPathLocal());
return;
}
@@ -178,6 +177,8 @@ public class SkinManager extends Observable {
//皮肤包的md5校验 防止下载文件损坏(但是会减慢速度。从数据库查询已下载皮肤表数据库中保留md5字段)
if (TextUtils.equals(SkinUtils.getSkinMD5(skinFile), skin.md5)) {
Log.d(TAG, "DownloadManager 校验成功,修改文件名。");
// 加载指定皮肤包
SkinManager.getInstance().loadSkin(skin.getPathLocal());
// 校验文件签名没问题后删除其他主题
deleteFilesExcept(themeDirectory, skin.getSkinFileName());
} else {
@@ -188,7 +189,6 @@ public class SkinManager extends Observable {
} catch (Exception e) {
e.printStackTrace();
}
SkinManager.getInstance().loadSkin(skin.getPathLocal());
}
@Override
@@ -202,7 +202,6 @@ public class SkinManager extends Observable {
public void onAlreadyDownloading(String url) {
// 处理重复下载的情况
Log.w(TAG, "DownloadManager onAlreadyDownloading url=" + url);
}
};
@@ -229,4 +228,16 @@ public class SkinManager extends Observable {
}
}
}
public static boolean renameFile(File oldFile, String newFilePath) {
File newFile = new File(newFilePath);
// 如果旧文件不存在,则直接返回 false
if (!oldFile.exists()) {
return false;
}
// 尝试重命名文件
return oldFile.renameTo(newFile);
}
}