当我们使用手机银行app时,突然收到短信或电话时app会进入后台,再次回到手机银行界面的时候会被要求重新输入登陆密码或验证指纹,这一需求的设计主要是出于安全性考虑,验证用户身份,保证资金的稳固。
  那么,以上的需求又是怎么实现的呢?怎么监听app的状态,达到app进入后台再回到前台时,总是跳出一个界面要求用户输入登陆密码或验证指纹呢?

1.在application中注册监听方法,一般写在onCreate方法中

  @Overridepublic void onCreate() {super.onCreate();initBackgroundCallBack();}

2.实现监听方法,主要通过registerActivityLifecycleCallbacks 方法实现

private void initBackgroundCallBack() {registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {}@Overridepublic void onActivityStarted(Activity activity) {}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {}@Overridepublic void onActivityStopped(Activity activity) { }}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityDestroyed(Activity activity) {}});}

  这里需要解释下registerActivityLifecycleCallbacks这个方法,只要app中有一个activity的生命周期改变了就会调用registerActivityLifecycleCallbacks的相应方法.
  比如说闪屏页splashActivity走了onCreate方法,registerActivityLifecycleCallbacks的onActivityCreated也会被调用,括号中的参数activity就是splashActivity本身

3.具体实现应用进入后台,回到前台监听,需要实现两个方法onActivityStarted,onActivityStopped
  先上代码:

 private void initBackgroundCallBack() {registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {}@Overridepublic void onActivityStarted(Activity activity) {appCount++;if (isRunInBackground) {//应用从后台回到前台 需要做的操作back2App(activity);}}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {}@Overridepublic void onActivityStopped(Activity activity) {appCount--;if (appCount == 0) {//应用进入后台 需要做的操作leaveApp(activity);}}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityDestroyed(Activity activity) {}});}/*** 从后台回到前台需要执行的逻辑** @param activity*/private void back2App(Activity activity) {isRunInBackground = false;}/*** 离开应用 压入后台或者退出应用** @param activity*/private void leaveApp(Activity activity) {isRunInBackground = true;}

  这里需要解释两个变量:

appCount 是为了判断应用是否进入后台,当一个activity的调用onStart方法时appCount就会+1,调用onStop方法时appCount就会-1,得到的appCount=0,当所有activity的appCount都=0时,说明所有的activity都在后台,即整个应用都处于后台

isRunInBackground 是为了判断应用是否在后台,如果应用在后台又被调用了onActivityStarted方法,说明应用从后台回到前台

  搞清楚了这两个变量后,我们就可以在back2App和leaveApp这两个方法中加入自己所需要的业务逻辑,实现与手机银行后台回到前台输入密码类似的功能。

android如何监听应用进入后台,回到前台时做相应逻辑相关推荐

  1. android怎么监听app被后台杀死,Android优雅的监听APP前台/后台的状态切换

    前言 先梳理下"前台"的概念.当App对用户可见,并且用户可以与App直接进行交互的时候,此时,我们说App处于前台:而当我们按下Home键回到桌面,此时则App处于"后 ...

  2. android 如何监听应用前后台切换

    今天,简单讲讲android如何判断应用切换到后台和应用切换到前台. 这个其实很简单,之前需要做一个功能,当app由后台进入前台时需要完成一些逻辑操作,所以在网上查找如何判断app由后台进入前台,最终 ...

  3. Android怎样监听蓝牙耳机的按键事件

    Android怎样监听蓝牙耳机的按键事件 写在前面: 直接想要代码非常easy,你直接把滚动栏拉到最底端就能够看到.假设想要十分地了解为什么,那就依照我规划的一步一步来理解.下面測试环境以手头上有的「 ...

  4. Android如何监听蓝牙耳机的按键事件(转)

    源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...

  5. Android监听左右滑删除通知,Android 滑动监听RecyclerView线性流+左右划删除+上下移动...

    废话不多说了,直接给大家贴代码了.具体代码如下所示: xmlns:tools="http://schemas.android.com/tools" android:layout_w ...

  6. Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

    本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.c ...

  7. Android平台监听系统截屏方案预研及相关知识点

    最近有个针对系统截屏的需求,所以预研了Android平台上捕获系统截屏的方案. 最直接的方式就是监听手机的系统截屏组合键(电源键+音量下键),但是这种方式实现难度大,且有的机型使用特殊手势进行截屏,兼 ...

  8. Android RecyclerView 监听滑动

    今天,简单讲讲Android 如何监听滑动. 不废话了,主要是需要做一个功能,实现RecyclerView滑动时,让一个标题栏固定显示在顶部. 基本知识: 列表的滚动一般分为两种: 手指按下 -> ...

  9. java edittext 输入监听_Android应用开发之Android EditText 监听用户输入完成的实例

    本文将带你了解Android应用开发Android EditText 监听用户输入完成的实例,希望本文对大家学Android有所帮助. 我们都知道, Android   EditText输入框,并没有 ...

最新文章

  1. add python3.7 to path是什么意思_一起读源码:为什么 loguru 的时间 rotation 不能只精确到天...
  2. 【分块】#6278. 数列分块入门 2 (区间修改、查询权值c在区间中的排名)
  3. 注册窗口类RegisterClassEx   AfxRegisterWndClass
  4. Zabbix的分布式监控部署
  5. matlab ceil,matlab中的fix、round、floor、ceil的区别与含义
  6. php curl_init不能用,curl_init()函数不起作用
  7. (计算机组成原理)第五章中央处理器-第三节2:CPU专用数据通路
  8. linux同内核覆盖,Linux内核代码覆盖率 – GCOV
  9. 编程的一些小知识点总结
  10. HEVC: I帧、P帧及B帧
  11. MapWinGis学习(一) 新建图层 在指定点上打上图标
  12. android 虚拟按键源码流程分析
  13. 读博太孤独?你不是一个人!
  14. LeetCode算法之蓄水池算法
  15. mysql 集群 运维_【MySQL运维】Canal集群模式与多数据库同步部署
  16. Oracle中用户角色权限管理
  17. Sunday 算法-JavaScript实现
  18. 使用GI Agent(XAG)实现GoldenGate的高可用性(一)
  19. Direct3D 12 CreateSwapChain失败
  20. rviz导航——2D Pose estimate

热门文章

  1. 人一般长到几岁才会停止长高?
  2. 如何看懂行业分析报告?
  3. memcpy()详解
  4. 硬盘初始化分区选择GPT还是MBR?
  5. JWT springboot集成jWT
  6. 足球运动员的数据分析实战(python)
  7. SpringBoot常见的经典面试题
  8. 从“零”开始的C语言
  9. Linux 信号学习
  10. BT和eMule下载协议的比较和分析