在阅读了诸如";我怎么能知道我的Android应用程序是否在后台/前台;我仍然不确定间隙正在运行时该怎么办?
首选答案基本上是通过手动跟踪onPause
和onResume
或使用谷歌的新lifecycle
库来自己跟踪它。这工作得很好,但是这假设你控制了所有活动的代码,当一个间隙不是你自己的Activity
运行时,所以这个方法不适用
其他答案包括呼叫ActivityManager.getRunningAppProcesses()
或ActivityManager.getRunningTasks()
。这些当然不推荐使用,也不应该使用。我还猜测未来的政策变化可能会限制这一点。
那么,即使在显示间隙广告时,我怎么能知道我的应用程序是否在前台呢?
因为有人可能会问我为什么需要知道这些。我的应用程序使用WebView
。WebView
有一个讨厌的习惯,即使在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");
}