Android开发之判断APP前后台的方法
老套路看图:
我们可以利用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();
}
});
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端