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();
            }
        });
    }

感谢博主:监听APP前后台博主直达

猜你喜欢

转载自blog.csdn.net/xiayiye5/article/details/107341929