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

 我来答
匿名用户
2017-11-11
展开全部

按返回或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<ActivityManager.RunningTaskInfo> 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;    }}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式