检测应用程序前台事件

时间:2012-03-22 13:37:06

标签: android

是否有人知道某个事件监听器用于检测应用程序何时从后台返回到前台?我搜索了很多,但我没有找到这样的倾听者。任何其他解决方案表示赞赏谢谢!

4 个答案:

答案 0 :(得分:3)

您可能需要更具体地了解您的用例。

查看Activity Lifecycle.

当你的活动到达前台时,onResume()和onStart()都会被调用。

修改: onRestart()

答案 1 :(得分:3)

我在BaseActivity中做了类似的事情

在onResume中

我检查enterCount是否等于0然后添加enterCount in onPause我将enterCount延迟减少300ms,当onCreate没有延迟两个长时似乎很好,或者我们可以在onCreate中做些什么来避免第一次。

protected void onResume(){
         int  enterCount=GlobalManager.getInstance().getEnterCount();
        if(enterCount==0){
            //do some thing for first enter 
        }
        GlobalManager.getInstance().increaseEnterCount();
}

protected void onPause(){
        GlobalManager.getInstance().decreaseEnterCountDelay();

}

答案 2 :(得分:2)

我不确定你要做什么,但是如果你想区分这两个序列:

  • onCreate(),onStart(),onResume()
  • onPause(),onResume()

你可以在onPause()中设置一个标志,并在onResume()中检查该标志。

答案 3 :(得分:0)

在Android 19中,您可以在Application类的onCreate()中注册应用程序生命周期回调,如下所示:

@Override
public void onCreate() {
    super.onCreate();
    registerActivityLifecycleCallbacks(new AppLifecycleCallback());
}

AppLifecycleCallback如下所示:

class AppLifecycleCallback implements Application.ActivityLifecycleCallbacks {
    private int numStarted = 0;

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

    }

    @Override
    public void onActivityStarted(Activity activity) {
        if (numStarted == 0) {
           //app went to foreground
        }
        numStarted++;
    }

    @Override
    public void onActivityResumed(Activity activity) {

    }

    @Override
    public void onActivityPaused(Activity activity) {

    }

    @Override
    public void onActivityStopped(Activity activity) {
        numStarted--;
        if (numStarted == 0) {
            // app went to background
        }
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }
}