您的位置:首页 > 移动开发

android app前后台的监听

2016-04-26 16:25 375 查看
当app按home或者返回键到主界面的时候,android没有提供一个明确的广播或者方法来判断,所以要实现这个只有从其它方面实现。

其实当我们按home键或者按返回键的时候,都会执行activity的onstop();方法,因此,可以写一个baseActivity在其中重新onstop()方法,然后每一个activity通过继承这个base来做判断,先来看看这种的实现方式。

public class baseActivity extends Activity{

private int mInBackgroud = 0;//标记

private boolean isInbackgroud = false;//判断程序是否在前台运行

@Override

protected void onStart() {

mInBackgroud++;

if(isInbackgroud&&mInBackgroud==1){

isInbackgroud = false;

//重新进入前台

}

super.onStart();

}

@Override

protected void onStop() {

mInBackgroud--;

if(mInBackgroud<1){

//代表此app没有运行在前台

isInbackgroud = true;

}

super.onStop();

}

}

上段代码就简单了写了app前后台变化的监听,在其中可以做我们想实现的方法。

熟悉Activity生命周期应该了解,运行一个app会执行某个activity的onstart()方法,这个时候mInBackgroud就会为1,

也就代表第一次在前台运行,当点击home后会执行stop(),此时mInBackgroud会为0,代表进入后台。当下次重新进入,

重走onstart()再次进入前台,当两个activity实现跳转或者回退的时候,这样的逻辑也是可以的,

因为跳转一个新页面的时候会优先执行新activity的onstart()这个时候mInBackgroud为2,是不会进入到重新进入前台的判断的。

之后会执行第一个activity的onstop(),mInBackgroud--为1,也表示正常,没有运行在后台。这个activity的跳转周期各位可以自己试一试。

或许有人会觉得写个base太麻烦,还得每一个继承。或者有的人当初就没有写,其实在api14之后Application里面已经有了一个回调所有activity的方法,

可以监听每一个activity的声明周期

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

@Override

public void onActivityStopped(Activity activity) {

RunInBackGround--;

Log.i("RunInBackGround", RunInBackGround+"");

if(RunInBackGround<1){

isRunInBackGround = true;

}

}

@Override

public void onActivityStarted(Activity activity) {

RunInBackGround++;

Log.i("RunInBackGround", RunInBackGround+"");

if(isRunInBackGround&&RunInBackGround==1){

isRunInBackGround = false;

//执行在后台的操作

}

}

@Override

public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

// TODO Auto-generated method stub

}

@Override

public void onActivityResumed(Activity activity) {

// TODO Auto-generated method stub

}

@Override

public void onActivityCreated(Activity activity,

Bundle savedInstanceState) {

// TODO Auto-generated method stub

}

@Override

public void onActivityPaused(Activity activity) {

// TODO Auto-generated method stub

}

@Override

public void onActivityDestroyed(Activity activity) {

// TODO Auto-generated method stub

}

});

这样就不用重写base了,只需要重写Application调用上面的方法就可以了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: