Android アクティビティのライフサイクルを計測するために AspectJ を使用しています。基本的に、メソッドが実行される前onCreate(Bundle)
に、ポイントカットとonDestroy()
アドバイスがあります。
基本的に、レジストリなどのアクティビティへのアクティブな参照の数を数えます。が呼び出された場合onCreate(Bundle)
は、基本的に count++ を実行します。onDestroy()
呼ばれたら数えます―― 。したがって、カウントが 0 になった場合、私の場合、アプリケーションの終了イベントと見なすことができるアクティビティは残っていません。
現在、メソッドの実行を延期してシステムをシャットダウンするタイマー(すでにjava.util.timerとandroid.os.Handlerを試しました)を使用しています。ただし、場合によっては、タイマーが開始されてもメソッドが実行されないことがあります。Android はプロセス全体を強制終了しているようです。デーモン スレッドを使用するかどうかも問題ではありません。クラッシュも例外もありません。すべてがメソッドの途中で停止するだけです。アプリケーションをデバッグしているときにも、この動作に遭遇しました。だから私はブレークポイントとブームに到達しただけで、プロセスはなくなりました.
おもしろいことに、タイマーを使わずに、メソッドの直前と直後に LogCat メッセージを配置してみました。タイマーも、別のスレッドも何もありませんでした。また、メソッドが呼び出されたことは確認できますが、最初の logcat メッセージでさえ出力されないことがあります。アプリは何もせずに停止するようです。私は実際には非常に経験豊富なプログラマーなので、ライフサイクルがどのように機能するか、AspectJ がどのように機能するか、マルチスレッドを正しく適用する必要があるかを理解しています。しかし、これは私を大いに混乱させます!
多分誰かが私を助けることができます!