中易网

如何判断一个Android应用程序转到后台并回到前台

答案:2  悬赏:40  
解决时间 2021-03-14 00:21
如何判断一个Android应用程序转到后台并回到前台
最佳答案
按返回或Home键退出应用程序的界面时,应用程序会在后台被挂起。这么设计的好处是,由于应用被系统缓存在内存中,那么在用户打开启动应用时就可以通过调用缓存,快速启动应用。当然,由于当今内存和处理器能力的限制,系统会自动关闭一些进程。那么我如何判断这个应用程序在前台还是后台,应用从后台回到前台了?看到一般都是runningProcess或者runningTasks来判断应用在前台还是后台事实上,Android在SDK 14的时候提供了一个Callback。ActivityLifecycleCallbacks,你可以通过这个Callback拿到App所有Activity的生命周期回调。
public class Application extends android.app.Application {
private int activityCount;//activity的count数
private boolean isForeground;//是否在前台
@Override public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override public void onActivityStarted(Activity activity) {
activityCount++;
} @Override
public void onActivityResumed(Activity activity) {
} @Override
public void onActivityPaused(Activity activity) {
} @Override
public void onActivityStopped(Activity activity) {
activityCount--; if(0==activityCount){
isForeground=false; }
} @Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
} @Override
public void onActivityDestroyed(Activity activity) {
} }); } }
这个Callback写在Application里的,你可以在Application初始化的时候来注册。通过这些回调我们可以将这个计数放在onStart()和onStop()中去。activityCount==1,那么就是前台,activityCount==0,那就是后台。这样判断很很简单了吧。
public abstract class BaseClass extends AppCompatActivity {
判断当前的应用程序是不是在运行
//需要申请GETTask权限
private boolean isApplicationBroughtToBackground() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(getPackageName())) {
return true; } } return false; }
public boolean wasBackground= false; //声明一个布尔变量,记录当前的活动背景
@Override public void onPause(){
super.onPause();
if(isApplicationBroughtToBackground())
wasBackground= true; }
public void onResume(){
super.onResume();
if(wasBackground){//
Log.e("aa","从后台回到前台"); } wasBackground= false; }}
全部回答
我们知道,当我们按返回或home键退出应用程序的界面时,应用程序会在后台被挂起。这么设计的好处是,由于应用被系统缓存在内存中,那么在用户打开启动应用时就可以通过调用缓存,快速启动应用。当然,由于当今内存和处理器能力的限制,系统会自动关闭一些进程。那么我如何判断这个应用程序在前台还是后台,应用从后台回到前台了?看到一般都是runningprocess或者runningtasks来判断应用在前台还是后台事实上,android在sdk 14的时候提供了一个callback。activitylifecyclecallbacks,你可以通过这个callback拿到app所有activity的生命周期回调。 public class application extends android.app.application { private int activitycount;//activity的count数 private boolean isforeground;//是否在前台 @override public void oncreate() { super.oncreate(); registeractivitylifecyclecallbacks(new activitylifecyclecallbacks() { @override public void onactivitycreated(activity activity, bundle savedinstancestate) { } @override public void onactivitystarted(activity activity) { activitycount++; } @override public void onactivityresumed(activity activity) { } @override public void onactivitypaused(activity activity) { } @override public void onactivitystopped(activity activity) { activitycount--; if(0==activitycount){ isforeground=false; } } @override public void onactivitysaveinstancestate(activity activity, bundle outstate) { } @override public void onactivitydestroyed(activity activity) { } }); } } 这个callback写在application里的,你可以在application初始化的时候来注册。通过这些回调我们可以将这个计数放在onstart()和onstop()中去。activitycount==1,那么就是前台,activitycount==0,那就是后台。这样判断很很简单了吧。 public abstract class baseclass extends appcompatactivity { 判断当前的应用程序是不是在运行 //需要申请gettask权限 private boolean isapplicationbroughttobackground() { activitymanager am = (activitymanager) getsystemservice(context.activity_service); list tasks = am.getrunningtasks(1); if (!tasks.isempty()) { componentname topactivity = tasks.get(0).topactivity; if (!topactivity.getpackagename().equals(getpackagename())) { return true; } } return false; } public boolean wasbackground= false; //声明一个布尔变量,记录当前的活动背景 @override public void onpause(){ super.onpause(); if(isapplicationbroughttobackground()) wasbackground= true; } public void onresume(){ super.onresume(); if(wasbackground){// log.e("aa","从后台回到前台"); } wasbackground= false; }} 文/tigergang(简书作者) 原文链接:http://www.jianshu.com/p/6abb22937e6f 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
洪发渔具在哪里啊,我有事要去这个地方
银川木工机械
matlab与c语言有什么区别?
红木国标 新的好还是旧的好
陆游的诗"花气袭人知骤暖"这句话是什么意思
上课吃糖这篇阅读中糖是甜的,为什么会酸甜苦
歌词中有“那么多的人”
微信零钱怎么免费转到卡里
天龙八部天山武魂上面打一颗紫玉,蓝晶,虎眼
黄磊两个孩子的名字
安徽有多少高度在1000米以上的高山
无PG矢量和有PG矢量有什么区别
宜章长行村镇银行在哪里啊,我有事要去这个地
写情感体验作文,给采纳
铭达窗帘布艺地址在哪,我要去那里办事
推荐资讯
三五组合在其中,五己功满配二一.
想知道此屋面装饰预算的步骤
考勤表上请假0.5天,一按就变成1了
告诉公路养护单位的(国企),做道路检测的怎
君利来百货文化用品厅地址在哪,我要去那里办
白开水 自来水和所谓的纯净水 的区别,如何判
长发怎么盘发好看又简单图解
台中大学有哪些?
灵魂献祭delta好玩吗
在人体细胞中由agu3种碱基可构成多少种核苷酸
我想买一本圣经 是哪个出版社的好 哪个人翻译
求大神告诉我这样的配置能玩天谕吗?能玩的话
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?