我的 VPN 隧道有一个带有“阻止/允许逻辑”的单例类。发送到隧道的数据包不会被发送,应用程序可以根据允许列表绕过,因此它可以作为防火墙的简单实现。
我想要做的是,当我更改Set<String>
被阻止的应用程序包名称时,我希望服务线程vpnservice.builder.establish()
使用这个被阻止的应用程序集再次运行。
一个明显的选择 - 如果服务是“普通”前台服务extends LifecycleService
,如此处所示。但是,我的服务必须扩展android.net.VpnService
,这没有实现LifecycleOwner
。此处显示了一种可能的实现方式(需要进行一些修改)。
我的问题是:
- 在我的单例类中,我的 VPN 服务是否有更好、更清洁、更优雅的方式来观察我的blockedPackageName 集合的变化?
- 如果没有其他方法,是否会
LifecycleOwner
以我期望的方式实施工作(基本上我是如何描述的)? lifecycle.handleLifecycleEvent(Lifecycle.Event.XXXX);
如果(2),添加我的服务的 onCreate 和 onDestroy 方法就足够了吗(见下文)?除了防止内存泄漏之外,这些还有什么作用吗?//MyVpnService class @Override public void onDestroy() { Log.i(TAG, "Destroyed."); stopVpn(); //what is the purpose of this line for my goals? lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY); }
PS:我阅读了关于生命周期组件的官方文档,但我找不到足够的代码示例来说明问题。