onDestroy
リスナーの登録を解除するまで待つことに潜在的な害があるかどうかを理解しようとしています。特にイベントバス (otto) からのサブスクライブ解除について言及していますが、その答えはほとんどのlistener pattern
実装 ( SharedPreferenceListener
、LocationListener
、static
参照など) に当てはまると思います。
「onDestroy が呼び出されることが保証されていない」というフレーズを引用している、この問題に対する他のいくつかの 回答を見てきました。完全なonDestroy
ドキュメントテキストは実際には次のように書かれています。
注: このメソッドがデータを保存する場所として呼び出されるとは考えないでください。たとえば、アクティビティがコンテンツ プロバイダのデータを編集している場合、それらの編集は、ここではなく、onPause() または onSaveInstanceState(Bundle) でコミットする必要があります。このメソッドは通常、アクティビティに関連付けられているスレッドなどのリソースを解放するために実装されます。これにより、アプリケーションの残りの部分がまだ実行されている間に、破棄されたアクティビティがそのようなリソースを残さないようにすることができます。システムがこのメソッド (または他のメソッド) を呼び出さずにアクティビティのホスティング プロセスを単純に強制終了する状況があるため、プロセスがなくなった後も残り続けることを意図したことを行うために使用しないでください。
これは、アプリケーション プロセスが強制終了される前に呼び出されない可能性があるため (ライフサイクル図が示すように)、データの保存onDestroy
には使用しないことを意味すると理解しています。
簡単に言えば、 onDestroy が呼び出されないために、リスナーとして登録されたアクティビティがリークする可能性がある状況はありますか?