我有一个单例类,我的VPN隧道有“阻止/允许逻辑”。不会发送发送到隧道的数据包,允许应用程序基于容差列表绕过,因此它可以表现为防火墙的简单实现。
我想要做的是,当我更改被阻止的应用程序包名称的Set<String>
时,我希望服务线程再次运行vpnservice.builder.establish()
,使用此被阻止的应用程序集。
一个明显的选择 - 如果服务extends LifecycleService
,as shown here,如果是“普通”前台服务。但是,我的服务必须扩展android.net.VpnService
,它没有实现LifecycleOwner
。一个可能的实现(需要一些修改)is shown here。
我的问题是:
LifecycleOwner
以我期望的方式工作(基本上我是如何描述的)?lifecycle.handleLifecycleEvent(Lifecycle.Event.XXXX);
(见下文)?这些除了防止内存泄漏之外还做了什么?
//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);
}
P.S。:我阅读了有关Lifecycle组件的官方文档,但是我找不到足够的代码示例来解决我的问题。
我找到的最佳解决方案是从单例类发送具有自定义意图的广播,并在启动时在vpnservice类中为此意图注册广播接收器。对于从任何课程发送广播,你需要上下文 - 幸运的是,我已经在我的单身中需要上下文,context.getApplicationContext()
可以正常工作而不会泄漏。