如何判断一个 APP 在前台还是后台?
这道题想考察什么?
- 是否了解如何判断一个 APP 在前台还是后台与真实场景使用,是否熟悉如何判断一个 APP 在前台还是后台在工作中的表现是什么?
考察的知识点
- 如何判断一个 APP 在前台还是后台的概念在项目中使用与基本知识
考生应该如何回答
1.你在工作中是如何对如何判断一个 APP 在前台还是后台?
答:
可以通过RunningTasks,RunningProcess 以及ActivityLifecycleCallback判定
RunningTasks方式实现:
注意:getRunningTask方法在5.0以上已经被废弃,只能返回自己和系统的一些不敏感的task,不再返回其他应用的task,用此方法来判断自身App是否处于后台是有效的,但是无法判断其他应用是否处于前台,因为不能再获取信息。
RunningProcess方式实现:
Android5.0之后已经被废弃。
例如,在聊天类型的App中,大部分时间需要常驻后台来不间断地获取服务器的消息,就必须把Service设置成START_STICKY,kill后会被重启(等待5s左右)来保证Service常驻后台。如果Service设置了这个属性,这个App的进程就可以判断为前台。代码表现为
下述code永远成立,这样就无法判断到底那个是前台了
ActivityLifecycleCallbacks方式实现:
这里我们对ActivityLifecycleCallbacks的实现类做了一层封装,利用Kotlin的高阶函数,当我们需要去实现那个声明周期的回调的时候,就通过高阶函数来提供回调处理,否则默认不做任何处理
然后我们在Application的onCreate中进行注册:
当我们不管是点击Back键还是Home键都会回调到onStop方法,我们在onStart和onStop中分别对mCount值做了加减
这样我们可以通过该数值来判断当前App是前台还是后台
最后
我整理了一套Android面试题合集,除了以上面试题,还包含【Java 基础、集合、多线程、虚拟机、反射、泛型、并发编程、Android四大组件、异步任务和消息机制、UI绘制、性能调优、SDN、第三方框架、设计模式、Kotlin、计算机网络、系统启动流程、Dart、Flutter、算法和数据结构、NDK、H.264、H.265.音频编解码、FFmpeg、OpenMax、OpenCV、OpenGL ES】