これは、Application.ActivityLifecycleCallbacksを使用して効率的な方法でこれを実現できます。
たとえば、ProfileActivityがフォアグラウンドまたはバックグラウンドのどちらにあるかを見つけることができるように、Activityクラス名を取得できます
最初に、アプリケーションクラスを拡張してアプリケーションクラスを作成する必要があります。
実装する
Application.ActivityLifecycleCallbacks
次のように私のアプリケーションクラスにしましょう
アプリケーションクラス
public class AppController extends Application implements Application.ActivityLifecycleCallbacks {
private boolean activityInForeground;
@Override
public void onCreate() {
super.onCreate();
//register ActivityLifecycleCallbacks
registerActivityLifecycleCallbacks(this);
}
public static boolean isActivityVisible() {
return activityVisible;
}
public static void activityResumed() {
activityVisible = true;
}
public static void activityPaused() {
activityVisible = false;
}
private static boolean activityVisible;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
//Here you can add all Activity class you need to check whether its on screen or not
activityInForeground = activity instanceof ProfileActivity;
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
public boolean isActivityInForeground() {
return activityInForeground;
}
}
上記のクラスには、ActivityLifecycleCallbacksのonActivityResumedのオーバーライドメソッドがあります。
@Override
public void onActivityResumed(Activity activity) {
//Here you can add all Activity class you need to check whether its on screen or not
activityInForeground = activity instanceof ProfileActivity;
}
現在画面に表示されているすべてのアクティビティインスタンスが見つかる場合は、上記の方法で、アクティビティが画面上にあるかどうかを確認してください。
アプリケーションクラスをmanifest.xmlに登録します。
<application
android:name=".AppController" />
上記のソリューションに従って、アクティビティがフォアグラウンドまたはバックグラウンドであるかを確認するには、確認する必要がある場所で次のメソッドを呼び出します
AppController applicationControl = (AppController) getApplicationContext();
if(applicationControl.isActivityInForeground()){
Log.d("TAG","Activity is in foreground")
}
else
{
Log.d("TAG","Activity is in background")
}