通过使用这部分代码,您可以检测应用何时进入后台/前台并访问当前活动名称和上下文。
我的回答基于这篇文章:Android: How to detect when App goes background/foreground
首先,创建一个扩展android.app.Application 并实现ActivityLifecycleCallbacks 接口的类。在Application.onCreate(),注册回调。
public class App extends Application implements ActivityLifecycleCallbacks
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
如下在Manifest中注册“App”类,
<application
android:name=".App"
ActivityLifecycleCallbacks 接口是这样的,
public interface ActivityLifecycleCallbacks {
void onActivityCreated(Activity activity, Bundle savedInstanceState);
void onActivityStarted(Activity activity);
void onActivityResumed(Activity activity);
void onActivityPaused(Activity activity);
void onActivityStopped(Activity activity);
void onActivitySaveInstanceState(Activity activity, Bundle outState);
void onActivityDestroyed(Activity activity);
}
因此,当您的任何 Activity(您创建或包含在您的库中的 Activity)通过上述任何生命周期方法时,将调用这些回调。
应用在前台时,至少有一个处于已启动状态的Activity,而在应用处于后台时,将没有处于已启动状态的Activity。
在“App”类中声明如下2个变量。
private int activityReferences = 0;
private boolean isActivityChangingConfigurations = false;
activityReferences 将保持活动数量的计数处于启动状态。 isActivityChangingConfigurations 是一个标志,用于指示当前 Activity 是否正在经历配置更改,例如方向切换。
使用以下代码可以检测 App 是否进入前台。
@Override
public void onActivityStarted(Activity activity) {
if (++activityReferences == 1 && !isActivityChangingConfigurations) {
// App enters foreground
}
}
您可以像这样在此方法中访问上下文:
activity.getBaseContext()
这是检测应用程序是否进入后台的方法。
Override
public void onActivityStopped(Activity activity) {
isActivityChangingConfigurations = activity.isChangingConfigurations();
if (--activityReferences == 0 && !isActivityChangingConfigurations) {
// App enters background
}
}
现在您可以访问当前前台活动名称和上下文。