利用ActivityLifecycleCallBack监控app前后台状态切换,实现手势密码
来源:互联网 发布:北京致远软件 编辑:程序博客网 时间:2024/06/05 03:10
转载注明出处:http://blog.csdn.net/coderder/article/details/51063493
利用ActivityLifecycleCallbacks监控app前后台状态切换,实现手势密码
最近由于项目需求,需要在应用中加入手势密码这个功能,具体需求是这样的:首次启动应用会和后台校验手势密码,当切换到后台超过5分钟后,应用再次进入前台需要判断进入手势解锁界面; 当看到这个需求的时候,我首先想到的就是在应用的application类中应该会有整个application生命周期的回掉,但是刚开始不知道有ActivityLifecycleCallbacks这个监控整个应用每个activity生命周期的API,遂又想到在baseactivity中利用ActivityManager中通过RunningTaskInfo拿到前台activity是否属于自己应用,来判断应用是在前台还是后台,但是这个方法太笨重了,而且不优雅。
Android在SDK 14提供了一个Callback即ActivityLifecycleCallbacks,通过这个Callback可拿到App所有
Activity的生命周期回调
@Overridepublic void onCreate() {super.onCreate();registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {}@Overridepublic void onActivityStarted(Activity activity) {}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {}@Overridepublic void onActivityStopped(Activity activity) {}@Overridepublic void onActivityDestroyed(Activity activity) {}});}
怎么样,是不是清爽了许多。。。。
紧接着问题来了,现在是拿到了应用中每个activity的生命周期,怎么判断当前应用是在前后台呢,这个难不倒我们
开发者啊,可以定义一个计数器嘛,定义全局变量int count,activity打开加一,关闭减一,写在哪些方法中呢?经过个人实践,
最佳方法是分别在onActivityStarted()(count++),onActivityStopped()(count--); 哈哈,这不就有思路了吗,代码撸起来。。。
PS:有人肯定会问:为啥不在onActivityResumed()和onActivityPaused()中进行计数呢,好,现在假设有这么种情况,应用内由ActivityA---->ActivityB,会执行:ActivityA(onPause())-->ActivityB(onCreate())-->ActivityB(onStart())-->ActivityB(onResume())-->ActivityA(onStop()),那么此时count减一,为0了,判断是在后台了,可是明明在前台啊,所以放在这两个生命周期进行count的计算时不准确的。
好了,关于后台五分钟判断:看代码:
public class MyApplication extends Application {private long time = -2;public int count = 0;@Overridepublic void onCreate() {super.onCreate();registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {}@Overridepublic void onActivityStarted(Activity activity) {if (count == 0) {//Log.v("tag", ">>>>>>>>>>>>>>>>>>>切到前台 lifecycle");// 首先计算时间 网络请求判断是否进入手势密码验证界面Log.v("cjq", ">>>>>>>>>>>>>>>>>>>切到前台 lifecycle");if (-2 == time) {//判断进入解锁手势密码} else {Date date2 = new Date();returnTime = date2.getTime();double sub = BigDecimalUtils.sub2(new BigDecimal(returnTime), new BigDecimal(time));if (sub >= 300000d) { //判断进入解锁手势密码} else {time = -1;}}} else {if (-2 == time) {//判断进入解锁手势密码}time = -1;}count++;}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {}@Overridepublic void onActivityStopped(Activity activity) {count--;if (count == 0) {Log.v("tag", ">>>>>>>>>>>>>>>>>>>切到后台 lifecycle");date = new Date();time = date.getTime();} else {time = -1;}}@Overridepublic void onActivityDestroyed(Activity activity) {}});}
- 利用ActivityLifecycleCallBack监控app前后台状态切换,实现手势密码
- 利用ActivityLifecycleCallbacks实现前后台进程切换
- Android App前后台切换的监听
- App前后台切换的监听
- android判断app前后台状态
- Android 判断App前后台运行状态
- 代码实现程序前后台切换
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- Android实现程序前后台切换效果
- pycharm 配置svn
- 4. 关于一个评分demo实现的注意事项
- camshift
- Linux应用服务器搭建手册——JDK安装与配置
- Fresco-Facebook的图片加载框架的使用
- 利用ActivityLifecycleCallBack监控app前后台状态切换,实现手势密码
- window.location.hash属性介绍
- 用Gson包进行解析本地的json文件
- LeetCode 231. Power of Two(2的N次幂)
- 轮廓、边缘、边界的相关函数
- 笔记--PageHelper分页
- Ajax应用详解
- iOS 如何设置启动引导图
- 循环队列学习