Android app 如何监听应用前后台切换 解决方案

背景:当app从前台切换至后台后,三分钟后切换至前台,需要都进入到密码校验页面.

解决思路:监听Activity的生命周期.

1.在BaseActivity里面的oncreate里面注册

registerActivityLifecycleCallbacks Activity的生命周期方法
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) {
                isForeground = true;
            }

            @Override
            public void onActivityStarted(@NonNull Activity activity) {
                if (isForeground) {
                    //do nothing
                } else {
                    long currentTimeMillis = System.currentTimeMillis();
                    if ((currentTimeMillis - startSwitchBackgroundTime) > Constants.THREE_MINUTES) {
                        sendBroadcast(new Intent(Constants.ACTION_VERIFY_PIN));
                    }
                }
            }

            @Override
            public void onActivityResumed(@NonNull Activity activity) {

            }

            @Override
            public void onActivityPaused(@NonNull Activity activity) {

            }

            @Override
            public void onActivityStopped(@NonNull Activity activity) {
                if (UIUtils.isBackground(BaseApplication.this)) {
                    isForeground = false;
                    startSwitchBackgroundTime = System.currentTimeMillis();
                }
            }

            @Override
            public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(@NonNull Activity activity) {

            }
        });

2.所有的页面都继承BaseActivity

3.在BaseActivity里面注册一个广播,广播的作用用于跳转到密码校验页面,为防止内存泄漏需要在onDestory里面取消注册广播

static class AppStatusBroadcast extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            context.startActivity(new Intent(Constants.INTENT_ACTION_PIN_VERIFY));
        }
    }

4.这样可满足切换前后台监听的要求

上述解决存在的问题是,当所有的页面都继承baseactivity 从主页跳转到A页面 ,A跳转到B页面,就相当于Activity栈有3个页面,当从后台切换至前台时由于三个Activity都没有销毁会启动三次密码验证页面,这样不合理,解决方式是,只需要将密码验证的Activity的启动模式设置成SingleTask即可保证同一个栈不会重复创建同一个密码验证页面

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值