VPN トンネルの「ブロック/許可ロジック」を持つシングルトン クラスがあります。トンネルに送信されたパケットは送信されず、アプリケーションは許可リストに基づいてバイパスできるため、ファイアウォールの単純な実装として動作できます。
私がやりたいことは、Set<String>
ブロックされたアプリケーションのパッケージ名を変更するときに、このブロックされたアプリケーション セットを使用してサービス スレッドをvpnservice.builder.establish()
再度実行することです。
これに対する明らかな選択 -ここに示されているようextends LifecycleService
に、「通常の」フォアグラウンド サービスの場合。ただし、私のサービスは拡張する必要があり、実装されていません。可能な実装 (いくつかの変更が必要)をここに示します。android.net.VpnService
LifecycleOwner
私の質問は次のとおりです。
- VPN サービスが、シングルトン クラスで、blockedPackageName コレクションの変更を監視するための、よりクリーンでエレガントな方法はありますか?
- 別の方法がない場合、実装は
LifecycleOwner
私が期待する方法で機能しますか (基本的に私が説明した方法)? (2) の場合
lifecycle.handleLifecycleEvent(Lifecycle.Event.XXXX);
、サービスの 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: ライフサイクル コンポーネントに関する公式ドキュメントを読みましたが、問題をより明確にするのに十分なコード例が見つかりませんでした。