当前位置: 移动技术网 > 移动技术>移动开发>Android > Android监听APP前后台转换的两种方式实例讲解

Android监听APP前后台转换的两种方式实例讲解

2019年01月05日  | 移动技术网移动技术  | 我要评论

应用场景:很多时候我们需要去监听用户有没有将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前后台切换的动态监听

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网