Ciò può ottenere ciò in modo efficiente utilizzando Application.ActivityLifecycleCallbacks
Ad esempio, prendiamo il nome della classe Activity come ProfileActivity e scopriamo se è in primo piano o in background
per prima cosa dobbiamo creare la nostra classe di applicazione estendendo la classe di applicazione
che implementa
Application.ActivityLifecycleCallbacks
Consente di essere la mia classe di applicazione come segue
Classe di applicazione
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;
}
}
nella classe sopra c'è un metodo di override onActivityResumed di ActivityLifecycleCallbacks
@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;
}
dove è possibile trovare tutte le istanze di attività attualmente visualizzate sullo schermo, controlla semplicemente se la tua attività è sullo schermo o meno con il metodo sopra.
Registra la tua classe Application in manifest.xml
<application
android:name=".AppController" />
Per controllare il tempo L'attività è in primo piano o in background secondo la soluzione sopra, chiama il seguente metodo sui luoghi che devi controllare
AppController applicationControl = (AppController) getApplicationContext();
if(applicationControl.isActivityInForeground()){
Log.d("TAG","Activity is in foreground")
}
else
{
Log.d("TAG","Activity is in background")
}