1

VPN トンネルの「ブロック/許可ロジック」を持つシングルトン クラスがあります。トンネルに送信されたパケットは送信されず、アプリケーションは許可リストに基づいてバイパスできるため、ファイアウォールの単純な実装として動作できます。

私がやりたいことは、Set<String>ブロックされたアプリケーションのパッケージ名を変更するときに、このブロックされたアプリケーション セットを使用してサービス スレッドをvpnservice.builder.establish()再度実行することです。

これに対する明らかな選択 -ここに示されているようextends LifecycleServiceに、「通常の」フォアグラウンド サービスの場合。ただし、私のサービスは拡張する必要があり、実装されていませ。可能な実装 (いくつかの変更が必要)をここに示しますandroid.net.VpnServiceLifecycleOwner

私の質問は次のとおりです。

  1. VPN サービスが、シングルトン クラスで、blockedPackageName コレクションの変更を監視するための、よりクリーンでエレガントな方法はありますか?
  2. 別の方法がない場合、実装はLifecycleOwner私が期待する方法で機能しますか (基本的に私が説明した方法)?
  3. (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: ライフサイクル コンポーネントに関する公式ドキュメントを読みましたが、問題をより明確にするのに十分なコード例が見つかりませんでした。

4

1 に答える 1