老套路看图:
我们可以利用application监听全局的所有activity的生命周期前提版本大于Android4.0
提供一个监听的工具类
package com.mchsdk.open;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
/**
* @author XiaYiYe5
* 2020年7月14日15:32:02
* 监听游戏前后台的工具类
*/
public class AppFrontBackHelper {
private OnAppStatusListener mOnAppStatusListener;
public AppFrontBackHelper() {
}
/**
* 注册状态监听,仅在Application中使用
*
* @param application 全局application
* @param listener 监听器
*/
public void register(Application application, OnAppStatusListener listener) {
mOnAppStatusListener = listener;
application.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
public void unRegister(Application application) {
application.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
private Application.ActivityLifecycleCallbacks activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
//打开的Activity数量统计
private int activityStartCount = 0;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
activityStartCount++;
//数值从0 变到 1 说明是从后台切到前台
if (activityStartCount == 1) {
//从后台切到前台
if (mOnAppStatusListener != null) {
mOnAppStatusListener.onFront();
}
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
activityStartCount--;
//数值从1到0说明是从前台切到后台
if (activityStartCount == 0) {
//从前台切到后台
if (mOnAppStatusListener != null) {
mOnAppStatusListener.onBack();
}
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
};
public interface OnAppStatusListener {
/**
* 前台运行
*/
void onFront();
/**
* 后台运行
*/
void onBack();
}
}
再看下如何调用:
可以在application的onCreate或者attachBaseContext生命周期里面调用,
/**
* @author xiayiye5
* 2020年6月5日16:42:48
*/
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
AppFrontBackHelper helper = new AppFrontBackHelper();
helper.register(MyApplication.this, new AppFrontBackHelper.OnAppStatusListener() {
@Override
public void onFront() {
//应用切到前台处理
ToastUtil.show(MyApplication.this, "前台了");
YhshUtils.getInstance().countTime(MyApplication.this);
}
@Override
public void onBack() {
//应用切到后台处理
ToastUtil.show(MyApplication.this, "后台了");
//APP已切换到后台,结束游戏时间计时
YhshUtils.getInstance().uploadOnlineTime();
}
});
}
}
当然也可以写个方法传递application的对象调用如下:
public void init(final Context con, boolean isDebug) {
init(con, null, isDebug);
//监听APP在前后台的方法
AppFrontBackHelper helper = new AppFrontBackHelper();
helper.register((Application) con, new AppFrontBackHelper.OnAppStatusListener() {
@Override
public void onFront() {
//应用切到前台处理
ToastUtil.show(con, "前台了");
YhshUtils.getInstance().countTime(con);
}
@Override
public void onBack() {
//应用切到后台处理
ToastUtil.show(con, "后台了");
//APP已切换到后台,结束游戏时间计时
YhshUtils.getInstance().uploadOnlineTime();
}
});
}