# PluginManager 空闲插件清理
用于配置宿主 App 在空闲时,清理本地「超过保留时长、且近期未加载过」的插件版本。
以下为 PluginManager 的 public static 配置接口,进程内全局生效。建议在 new PluginManager(context) 之前调用,即 MainPageProxy.onCreate之前。
# SDK 版本要求
// 高于等于这个版本才有下面的接口
com.tvcode.js_view_app:JSViewApp:1.4.763.20260618
1
2
2
# public static 接口
# setAutoIdleCleanupEnabled(boolean enabled)
是否在 new PluginManager() 时自动执行空闲清理。
| 值 | 效果 |
|---|---|
false | 默认。不自动清理 |
true | 构造完成后,按 setIdleCleanupDelayMs 设置的延迟自动清理一次 |
PluginManager.setAutoIdleCleanupEnabled(true);
PluginManager.setIdleCleanupDelayMs(5 * 60 * 1000L);
1
2
2
# setIdleCleanupDelayMs(long delayMs)
设置空闲清理的执行延迟(毫秒)。在 setAutoIdleCleanupEnabled(true) 时,new PluginManager() 后会按此延迟再开始清理。
delayMs | 效果 |
|---|---|
>= 0 | 延迟毫秒数,0 表示尽快执行 |
< 0 | 忽略,不修改 |
默认值:5 * 60 * 1000(5 分钟)
PluginManager.setIdleCleanupDelayMs(60 * 1000L); // 1 分钟后再清理
1
# setUnusedPluginRetentionDays(int days)
设置保留时长(按天)。
days | 效果 |
|---|---|
> 0 | 仅保留最近 days 天内加载过的版本;更早的可被清理 |
<= 0 | 关闭空闲清理 |
默认值:30(30 天)
PluginManager.setUnusedPluginRetentionDays(30); // 正式环境
PluginManager.setUnusedPluginRetentionDays(0); // 关闭清理
1
2
2
# setUnusedPluginRetentionMs(long retentionMs)
设置保留时长(按毫秒),适合调试短周期。
retentionMs | 效果 |
|---|---|
> 0 | 保留时长(毫秒) |
<= 0 | 关闭空闲清理 |
与 setUnusedPluginRetentionDays 共用同一配置,后调用的覆盖前者。
// 调试:15 分钟内加载过的才保留
PluginManager.setUnusedPluginRetentionMs(15 * 60 * 1000L);
1
2
2
# getUnusedPluginRetentionMs()
读取当前保留时长(毫秒)。
- 未手动配置时,等价于默认 30 天 对应的毫秒数
- 已关闭清理时返回
0
long ms = PluginManager.getUnusedPluginRetentionMs();
1
# 典型场景
# 正式环境(默认即可)
@Override
public void onCreate() {
super.onCreate();
// 创建插件模块后一定时间执行清理插件操作
PluginManager.setAutoIdleCleanupEnabled(true);
}
1
2
3
4
5
6
2
3
4
5
6
# 调试短周期
@Override
public void onCreate() {
super.onCreate();
// 插件15分钟内未被使用视为可清理
PluginManager.setUnusedPluginRetentionMs(15 * 60 * 1000L);
// 创建插件模块后一定时间执行清理插件操作
PluginManager.setAutoIdleCleanupEnabled(true);
// 创建插件模块 60 秒后执行清理
PluginManager.setIdleCleanupDelayMs(60 * 1000L);
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 开启自动清理
PluginManager.setAutoIdleCleanupEnabled(true);
PluginManager.setIdleCleanupDelayMs(5 * 60 * 1000L);
// 之后再 new PluginManager(context)
1
2
3
2
3
# 行为说明
- 「加载过」:以插件 dex 成功加载时记录的时间为准;无记录时参考版本目录修改时间。
- 不会删除:预加载中的版本、正在下载/加载的版本;有下载任务进行中时,本次清理整轮跳过。
- 关闭清理:
setUnusedPluginRetentionDays(0)或setUnusedPluginRetentionMs(0)后,清理逻辑不再执行。