当Android应用从后台进入前台时如何获得回调?

3

如何在Android中了解应用程序状态从后台到前台?

我将我的活动从一个名为Baseactivity的类继承,而Baseactivity类又继承了android Activity。 我在onRestart()中将代码appcomeForeground()放入了Baseactivity中,但是当我们将活动导航到前台应用程序时,它也会被调用。

请建议仅在应用程序进入前台时获取回调的方法。

提前感谢您的帮助。


你尝试过在所有活动之间维护单例状态吗? - sandrstar
可能是重复的问题:如何检查Android应用程序是否在后台运行 - Sebastian
4个回答

1
在 Baseactivity 中维护一个布尔变量。

i.e.:

  private boolean  isForeground;

BaseactivityonResume()方法中,将isForeground = true,在BaseactivityonPause()方法中,将isForeground = false。每当您想了解状态时,请检查该布尔变量并相应地应用您的逻辑。

谢谢回复。但是这个不起作用。 isForeground仍然为false. :( - PrvN
尝试一下,私有的静态布尔值isForeground; - Mehul Joisar
在 onRestart 中,我检查了 isForeground 标志,但它返回 false。 - PrvN
通过在Baseactivity的onRestart()方法中添加log.d("Baseactivity","onRestart called"),确保它每次都被执行。 - Mehul Joisar

1

要检查应用程序是否在前台或后台,您可以执行以下操作。

声明一个将维护状态的类。

public class ApplicationState {
    public static boolean isActivityVisible() {
        return activityVisible;
    }

    public static void activityResumed() {
        activityVisible = true;
    }

    public static void activityPaused() {
        activityVisible = false;
    }

    private volatile static boolean activityVisible;
}

在您的应用程序的每个活动的onResume方法中调用。
ApplicationState.activityResumed()

在您应用程序的每个活动的onPause方法中调用。
ApplicationState.activityPaused()

现在,您可以随时调用以下代码来检查您的应用程序的前/后台状态:
ApplicationState.isActivityVisible()

我在onStart和onRestart中使用了ApplicationState.isActivityVisible(),但它总是为false。 - PrvN
我正在使用这个方法,它运行良好。请检查您是否正确使用了activityresumed和activitypaused方法。 - stinepike
我在我的基础活动类中使用了这些方法,并且在子 onStart() 和 onRestart() 方法中检查 isActivityVisible。所有情况下都是 false。 - PrvN
我有20-30个活动,它们都是从BaseActivity继承而来的。这就是为什么我将其实现到BaseActivity中的原因。 请建议... - PrvN
好的..只需检查您的BaseActivity是否正确设置了数据。 - stinepike
显示剩余4条评论

0

0

另一种解决方案是在意图上调用putExtra,以让用户在应用程序的活动之间导航。如果onRestart/onResume未收到此Extra,则该应用程序刚刚进入前台。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接