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