Isso pode ser alcançado de maneira eficiente, usando Application.ActivityLifecycleCallbacks
Por exemplo, vamos pegar o nome da classe Activity como ProfileActivity permite descobrir se ela está em primeiro plano ou em segundo plano
primeiro precisamos criar nossa classe de aplicativo estendendo a classe de aplicativo
que implementa
Application.ActivityLifecycleCallbacks
Vamos ser minha classe de aplicativo da seguinte maneira
Aula de aplicação
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;
}
}
na classe acima, há um método de substituição onActivityResumed de 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;
}
onde todas as instâncias de atividade que estão sendo exibidas na tela podem ser encontradas, basta verificar se Sua Atividade está na Tela ou não pelo método acima.
Registre sua classe de aplicativo em manifest.xml
<application
android:name=".AppController" />
Para verificar se a atividade do clima está em primeiro ou segundo plano, de acordo com a solução acima, chame o seguinte método nos lugares que você precisa verificar
AppController applicationControl = (AppController) getApplicationContext();
if(applicationControl.isActivityInForeground()){
Log.d("TAG","Activity is in foreground")
}
else
{
Log.d("TAG","Activity is in background")
}