Android应用程序转到后台并回到前台判断方法
我们知道,当我们按返回或Home键退出应用程序的界面时,应用程序会在后台被挂起。这么设计的好处是,由于应用被系统缓存在内存中,那么在用户打开启动应用时就可以通过调用缓存,快速启动应用。当然,由于当今内存和处理器能力的限制,系统会自动关闭一些进程。
那么我如何判断这个应用程序在前台还是后台,应用从后台回到前台了?
看到一般都是runningProcess或者runningTasks来判断应用在前台还是后台
事实上,Android在SDK14的时候提供了一个Callback。ActivityLifecycleCallbacks,你可以通过这个Callback拿到App所有Activity的生命周期回调。
publicclassApplicationextendsandroid.app.Application{
privateintactivityCount;//activity的count数
privatebooleanisForeground;//是否在前台
@OverridepublicvoidonCreate(){
super.onCreate();
registerActivityLifecycleCallbacks(newActivityLifecycleCallbacks(){
@Override
publicvoidonActivityCreated(Activityactivity,BundlesavedInstanceState){
}
@OverridepublicvoidonActivityStarted(Activityactivity){
activityCount++;
}@Override
publicvoidonActivityResumed(Activityactivity){
}@Override
publicvoidonActivityPaused(Activityactivity){
}@Override
publicvoidonActivityStopped(Activityactivity){
activityCount--;if(0==activityCount){
isForeground=false;}
}@Override
publicvoidonActivitySaveInstanceState(Activityactivity,BundleoutState){
}@Override
publicvoidonActivityDestroyed(Activityactivity){
}});}}
这个Callback写在Application里的,你可以在Application初始化的时候来注册。
通过这些回调我们可以将这个计数放在onStart()和onStop()中去。activityCount==1,那么就是前台,activityCount==0,那就是后台。这样判断很很简单了吧。
publicabstractclassBaseClassextendsAppCompatActivity{
判断当前的应用程序是不是在运行
//需要申请GETTask权限
privatebooleanisApplicationBroughtToBackground(){
ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningTaskInfo>tasks=am.getRunningTasks(1);
if(!tasks.isEmpty()){ComponentNametopActivity=tasks.get(0).topActivity;
if(!topActivity.getPackageName().equals(getPackageName())){
returntrue;}}returnfalse;}
publicbooleanwasBackground=false;//声明一个布尔变量,记录当前的活动背景
@OverridepublicvoidonPause(){
super.onPause();
if(isApplicationBroughtToBackground())
wasBackground=true;}
publicvoidonResume(){
super.onResume();
if(wasBackground){//
Log.e("aa","从后台回到前台");}wasBackground=false;}}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!