プロセスが外部手段によって終了した場合(つまり、メモリ上の理由でアプリケーションが強制終了された場合、またはユーザーがアプリケーションを強制的に停止した場合)、アプリケーションは追加のコールバックを受け取りません。アプリがアプリケーションのクリーンアップのためにバックグラウンドに入ったときに受け取ったコールバックを処理する必要があります。
finish()
は、ユーザーがアクティビティから[戻る]ボタンを押したときにのみシステムによって呼び出されますが、多くの場合、アプリケーションから直接呼び出されて、アクティビティを終了して前のアクティビティに戻ります。これは技術的にはライフサイクルコールバックではありません。
onDestroy()
への呼び出しの結果としてのみアクティビティで呼び出されるfinish()
ため、主にユーザーが[戻る]ボタンを押したときにのみ呼び出されます。ユーザーがHOMEボタンを押すと、フォアグラウンドアクティビティは通過するだけonPause()
ですonStop()
。
これは、Androidがアクティビティに多くのフィードバックを提供して、ホームに移動するユーザーと別のアクティビティに移動するユーザーを区別することを意味します(アプリまたはその他から)。アクティビティ自体は、それがもはやフォアグラウンドにないことを単に知っています。Androidアプリケーションは、緊密に統合された単一の概念よりも緩いアクティビティのコレクションであるため(他のプラットフォームで慣れているように)、アプリケーション全体がいつ進められたか、移動されたかを知るための実際のシステムコールバックはありません。後方。
最終的には、アプリケーションのアクティビティがフォアグラウンドにあるかどうかの知識に依存している場合は、アプリケーションアーキテクチャを再検討することをお勧めしますが、ニーズによっては、これを実現するためのフレームワークに適した方法が他にもある場合があります。1つのオプションは、アクティブな間(つまり、との間)Service
にすべてがバインドするアプリケーション内にバインドを実装することです。これにより、バウンドはクライアントがバウンドしている間だけ存続するという事実を活用できるため、サービスのメソッドとメソッドを監視して、現在のフォアグラウンドタスクがアプリケーションの一部ではないことを知ることができます。Activity
onStart()
onStop()
Service
onCreate()
onDestroy()
また、Dianne Hackbornによって書かれたこの記事は、Androidアーキテクチャと、それを使用する必要があるとGoogleがどのように考えているかをより詳細にカバーしているので興味深いと思うかもしれません。