ユーザーによって開始されることもあれば、サービスから開始されることもあります。サービスから開始したとき (アクティビティの onNewIntent() コールバックによって受信されたインテントを送信することによって)、既に実行されている場合は画面を更新し、まだ実行されていない場合は実行を開始しないようにしたいだけです。
これを達成するための私の試みは、onResume() 中にアクティビティにブール値を設定し、onPause() 中にクリアするように調整されましたが、アクティビティが onNewIntent() を受け取る前に常に onPause() が呼び出されることに気付きました。したがって、値は常に間違い。
イベント シーケンスに慣れていない人のために、次のように説明します。
startActivity(myIntent); // Called from service with Intent Extra indicating that fact
onPause(); // Overriden method for my Activity
onNewIntent(Intent myIntent); // Overriden method for my Activity
onResume(); // Overriden method for my Activity
読み回しての私の理解は、この動作は修正され、意図されたものであり、それを回避する方法はないということです。私が見た 1 つの提案は、onPause() と onNewIntent() が呼び出される間の間隔を計り、それを onNewIntent() の直前にアクティビティが実行されていたかどうかの推定値として使用することでしたが、ここの誰かがより良い方法を知っていることを望んでいました?
私は実際には単純なアクティビティの代わりにフラグメントを使用していますが、それは重要なことを何も変えません。
ありがとう、