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;}}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!