我如何知道我的Android应用程序是否在前台,包括在显示间隙广告时



在阅读了诸如";我怎么能知道我的Android应用程序是否在后台/前台;我仍然不确定间隙正在运行时该怎么办?

首选答案基本上是通过手动跟踪onPauseonResume或使用谷歌的新lifecycle库来自己跟踪它。这工作得很好,但是这假设你控制了所有活动的代码,当一个间隙不是你自己的Activity运行时,所以这个方法不适用

其他答案包括呼叫ActivityManager.getRunningAppProcesses()ActivityManager.getRunningTasks()。这些当然不推荐使用,也不应该使用。我还猜测未来的政策变化可能会限制这一点。

那么,即使在显示间隙广告时,我怎么能知道我的应用程序是否在前台呢?

因为有人可能会问我为什么需要知道这些。我的应用程序使用WebViewWebView有一个讨厌的习惯,即使在WebView上调用onPause()时,也会让Javascript继续运行。我找到的唯一停止它的方法是运行webView.pauseTimers(),但这种方法适用于所有WebView,而不仅仅是你调用它的WebView。因此,如果我在间隙广告之前在Activity上调用onPause()时调用它,那么间隙广告可能会冻结,甚至可能是ANR。

如果您有Application类,则可以使用该类进行跟踪。

public class StarterApplication extends Application implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onAppBackgrounded() {
//App in background ,do your background stuff
Log.d( "onAppBackgrounded: ","called");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onAppForegrounded() {
// App in foreground,do your foreground stuff
Log.d("onAppForegrounded: ","called");
}

最新更新