私はバックグラウンド タスクを起動する Android アプリに取り組んでおり、最終的にはユーザーがバックグラウンド タスクを停止できるようにする必要があります。私のアプローチは次のとおりです。
- 打ち上げ活動
- アクティビティはサービスにバインドします
- アクティビティは、サービスを対象としたインテントを使用してサービスを開始します
- サービスはバックグラウンド タスクを起動し、onStartCommand から START_STICKY を返します
- その後、ユーザーはアクティビティに戻ります
- アクティビティがサービスを再バインドして再起動します
- アクティビティは、返された IBinder から公開されたメソッドを使用してバックグラウンド タスクを停止するようにサービスに指示します
サービスを使用する理由は、もともとサービスがアプリケーションの存続期間中存続すると考えていたからですが、Android プラットフォームがサービスを強制終了し、後で再起動する必要があることがわかりました (null を受信することで確認)。 onStartCommand のインテント)。ただし、バックグラウンド タスクをまだ処理しているので、それを強制終了できる限り、大したことではありません。したがって、私のアプローチは、バックグラウンド タスクへの参照をサービス クラス内の静的変数に格納することです。私はこれに夢中ではありませんが、うまくいくようです。私が直面している問題は、サービスが再インスタンス化されると、静的変数がリセットされることです。つまり、タスクへの参照が null (および他の静的変数) になります。これは私が混乱しているところです。Androidの「プロセス」です 従来の Java プロセスと同じではありませんか? なぜそうならないのかわかりません。もしそうなら、静的変数はその状態を維持する必要があります。そうでない場合、新しいサービス インスタンスは、以前に開始されたタスクをどのように停止するのでしょうか?
マニフェストで特別な「プロセス」属性を使用していません。デフォルトのみです。