Android监听APP前后台转换的两种方式实例讲解
程序员文章站
2022-03-19 22:12:44
应用场景:很多时候我们需要去监听用户有没有将apps放置在后台,比如常用的银行类app、音视频播放类app,那么这些app为什么要去监听应用程序在不在前台?银行当然是为了安全,必须保证一些数据的传输...
应用场景:很多时候我们需要去监听用户有没有将apps放置在后台,比如常用的银行类app、音视频播放类app,那么这些app为什么要去监听应用程序在不在前台?银行当然是为了安全,必须保证一些数据的传输一定是在前台,音视频播放app呢,是为了更好的用户体验,用户按下home键切换到其他页面,期望是想让正在播放的电影暂停下来,而不是看不到视频页面而app还在不停的播放,鉴于此种目的,我们需要做监听app前后台应用。现在找到两种方法来实现:
一:baseactivity基类+activitymanager.runningappprocessinfo
首先,创建所有activity的基类,项目中所有activity去继承baseactivity,这样就可以统一管理,baseactivity当然会有各种生命周期,onresume()和onstop()中去判断执行逻辑代码,也就是说进入一个activity页面 它的onresume肯定会执行,home键退出应用程序肯定会走onstop,逻辑伪代码综上所述,下面来看代码
public class baseactivity extends activity { public static boolean isactive; //全局变量 @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_base); } @override protected void onresume() { if (!isactive) { //app 从后台唤醒,进入前台 isactive = true; log.i("activity", "程序从后台唤醒"); } super.onresume(); } @override protected void onstart() { super.onstart(); } @override protected void onpause() { super.onpause(); } @override protected void onstop() { if (!isapponforeground()) { //app 进入后台 isactive = false;//记录当前已经进入后台 log.i("activity", "程序进入后台"); } super.onstop(); } @override protected void ondestroy() { super.ondestroy(); } /** * app是否处于前台唤醒状态 * * @return */ public boolean isapponforeground() { activitymanager activitymanager = (activitymanager) getapplicationcontext().getsystemservice(context.activity_service); string packagename = getapplicationcontext().getpackagename(); list appprocesses = activitymanager .getrunningappprocesses(); if (appprocesses == null) return false; for (activitymanager.runningappprocessinfo appprocess : appprocesses) { // the name of the process that this object is associated with. if (appprocess.processname.equals(packagename) && appprocess.importance == activitymanager.runningappprocessinfo.importance_foreground) { return true; } } return false; } }
二:application中注册声明周期监听回调
首先,创建当前项目的application去继承的application,在application中实现oncreate()方法,方法中注册reginsteractivitylifecyclecallbacks回调,来看代码实现
public class theapplication extends application { private int mfinalcount; @override public void oncreate() { super.oncreate(); registeractivitylifecyclecallbacks(new activitylifecyclecallbacks() { @override public void onactivitycreated(activity activity, bundle savedinstancestate) { } @override public void onactivitystarted(activity activity) { mfinalcount++; //如果mfinalcount ==1,说明是从后台到前台 log.e("onactivitystarted", mfinalcount +""); if (mfinalcount == 1){ //说明从后台回到了前台 } } @override public void onactivityresumed(activity activity) { } @override public void onactivitypaused(activity activity) { } @override public void onactivitystopped(activity activity) { mfinalcount--; //如果mfinalcount ==0,说明是前台到后台 log.i("onactivitystopped", mfinalcount +""); if (mfinalcount == 0){ //说明从前台回到了后台 } } @override public void onactivitysaveinstancestate(activity activity, bundle outstate) { } @override public void onactivitydestroyed(activity activity) { } }); } }
这样基本上实现了app前后台切换的动态监听
上一篇: 网信办开展为期半年“全网整改”行动
下一篇: elasticsearch启动常见问题