あなたが実際に追跡しようとしているのは、アプリケーション内の「開始された」アクティビティの数であるように思われます: #(開始されたアクティビティ) > 0 は、アプリケーションがバックグラウンドに置かれていないことを意味します。ユーザーがホームを押すと、アプリのすべてのアクティビティで onStop() が呼び出されます。
「開始された」アクティビティの数を追跡するために、次のようにシングルトンを導入できます。
public class LifecycleTracker {
private LifecycleTracker mInstance;
private int mNrOfStarted;
private LifecycleTracker() {
mNrOfStarted = 0;
}
public static LifecycleTracker getInstance() {
if (mInstance == null) {
mInstance = new LifecycleTracker();
}
return mInstance;
}
public void incrementStarted() {
mNrOfStarted++;
}
public void decrementStarted() {
mNrOfStarted--;
}
public boolean fromBackground() {
return mNrOfStarted == 0;
}
}
次に、すべてのアクティビティの onStart() メソッドで、バックグラウンドから来ているかどうかを最初に確認する必要があります。
if (LifecycleTracker.getInstance().fromBackground()) {
//start authentication
//don't forget to increment after authentication as well!
} else {
LifecycleTracker.getInstance().incrementStarted();
}
そして、すべてのアクティビティの onStop() メソッドでデクリメントする必要があります:
LifecycleTracker.getInstance().decrementStarted();