如何从android前台(vpn)服务观察集合

问题描述 投票:1回答:1

我有一个单例类,我的VPN隧道有“阻止/允许逻辑”。不会发送发送到隧道的数据包,允许应用程序基于容差列表绕过,因此它可以表现为防火墙的简单实现。

我想要做的是,当我更改被阻止的应用程序包名称的Set<String>时,我希望服务线程再次运行vpnservice.builder.establish(),使用此被阻止的应用程序集。

一个明显的选择 - 如果服务extends LifecycleServiceas shown here,如果是“普通”前台服务。但是,我的服务必须扩展android.net.VpnService,它没有实现LifecycleOwner。一个可能的实现(需要一些修改)is shown here

我的问题是:

  1. 在我的单例类中,我的VPN服务是否有更好,更清晰,更优雅的方式来观察我的blockedPackageName集合中的更改?
  2. 如果没有其他方法,将实施LifecycleOwner以我期望的方式工作(基本上我是如何描述的)?
  3. 如果(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组件的官方文档,但是我找不到足够的代码示例来解决我的问题。

android observable foreground-service android-vpn-service
1个回答
0
投票

我找到的最佳解决方案是从单例类发送具有自定义意图的广播,并在启动时在vpnservice类中为此意图注册广播接收器。对于从任何课程发送广播,你需要上下文 - 幸运的是,我已经在我的单身中需要上下文,context.getApplicationContext()可以正常工作而不会泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.