• Android开发之判断APP前后台的方法


    老套路看图:
    image
    我们可以利用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();
                }
            });
        }
    

    转自Android开发之判断APP前后台的方法

  • 相关阅读:
    CSS3 @fontface实现颜色大小可控的三角效果
    html5 canvas之绘制曲线
    li内文字超出隐藏,不允许出现半汉字截断,超出后仍显示new图片,小于宽度自动跟随
    告别图片—使用字符实现兼容性的圆角尖角效果beta版
    常用JQuery插件整理
    获取不到header的自定义参数的值
    mavenresourcesproduction:xxxx: java.lang.NegativeArraySizeException
    Cannot find module '@babel/core'
    C# Set集合
    关于tomcat部署web服务方式
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/15093148.html
Copyright © 2020-2023  润新知