Android判断前后台状态

安卓根据不同的需求,经常会遇到需要判断app处于前后台的状况。

本人在开发中就遇到了需要判断前后台来展示广告的需求。

一开始,我是想要根据生命周期来进行判断展示,但是使用生命周的判断,在对于多界面activity之间跳转时就无法准确的判断前后状况。于是在网上找了不少资料,但是找到的代码好多,最终我整合了多方资料完成了此功能,在这书写整理一下,同时希望能帮助到他人。

下面上代码:

代码最好写在自定义继承activity的通用类中,如baseactivity:

1.最关键的判断部分,当返回false时表明处于后台,为true时是在前台展示:

 /**
     * 程序是否在前台运行
     *
     * @return
     */
    public boolean isAppOnForeground() {
        ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
        String packageName = getApplicationContext().getPackageName();

        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
                .getRunningAppProcesses();
        if (appProcesses == null)
            return false;

        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.processName.equals(packageName)
                    && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                return true;
            }
        }

        return false;
    }
2.我们在onstop方法中使用

isAppOnForeground()
判断处于后台的状态:
 @Override
    protected void onStop() {
        super.onStop();
        if (!isAppOnForeground()){
            //isAppOnForeground是用来判断是否处于后台的boolean变量
            //当isAppOnForeground为true时表明我们的程序已经处于后台
           isAppOnForeground = true;
        }
    }
3.同理我们需要在  onresume方法中判断app是否已回到前台:

  protected void onResume() {
        super.onResume();
        if (isAppOnForeground()){
        //在onResume中判断app是否处于前台更改变量值
            isAppOnForeground = false;
        }
    }
4.下面在你需要用到的activity中使用isapponforeground参数进行判断,最好将判断的代码写在onrestart的生命周期中(个人认为这样比叫好,因为从别的activity或者后台回到app时系统会先调用onRestart方法,然后在调用onstart方法,最后调用onResume方法,再次进入运行状态

  @Override
    protected void onRestart() {
        super.onRestart();
            if (isAppOnForeground&&isWowifi){
              
            }
    }
每当app退到后台回来时我们可以在onrestart方法先于onresume方法进行判断,此时判断的参数还未更改,我们可以依据此参数来判断是否要展示广告,做某些特定处理等功能。当运行到onresume方法时判参数isapponforeground又变为tfalse的前台状态,这样就不会影响到在app内部,多activity相互跳转时再次走过onrestart方法是出现误判的情况,这样我们就完成了android app前后台状态的判断。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值