利用ActivityLifecycleCallbacks判断APP是否在后台运行

Android 在SDK 14提供了一个Callback即ActivityLifecycleCallbacks,在Application中通过注册这个Callback可拿到App所有Activity的生命周期回调。解除注册可以调用Application中的unregisterActivityLifecycleCallbacks。

Application.java

...

public interface ActivityLifecycleCallbacks {
    void onActivityCreated(Activity activity, Bundle savedInstanceState);
    void onActivityStarted(Activity activity);
    void onActivityResumed(Activity activity);
    void onActivityPaused(Activity activity);
    void onActivityStopped(Activity activity);
    void onActivitySaveInstanceState(Activity activity, Bundle outState);
    void onActivityDestroyed(Activity activity);
}

...

Demo

CustomApplication.java

public class CustomApplication extends Application {

    private static CustomApplication instance;

    // Android 生命周期监听
    private ActivityLifeListener activityLifeListener;

    // 可见 Activity 个数
    private int activityCount;

    // 判断是否已经显示对话框
    private boolean isShowDialog;

    @Override
    public void onCreate() {
        super.onCreate();
        CustomApplication.instance = this;

        activityLifeListener = new ActivityLifeListener();
        this.registerActivityLifecycleCallbacks(activityLifeListener);
    }

    public static CustomApplication getInstance() {
        return instance;
    }

    /**
     * 判断 App 是否在前台运行
     */
    public boolean isBackground() {
        return activityCount == 0;
    }

    private class ActivityLifeListener implements ActivityLifecycleCallbacks{

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

        @Override
        public void onActivityStarted(Activity activity) {
            activityCount++;
        }

        @Override
        public void onActivityResumed(Activity activity) {
            if (!isShowDialog) {
                isShowDialog = true;
                new AlertDialog.Builder(activity)
                        .setTitle("提示")
                        .setMessage("这个对话框只有按Home键之后再回来才显示")
                        .setPositiveButton("确定", null)
                        .create()
                        .show();
            }
        }

        @Override
        public void onActivityPaused(Activity activity) {}

        @Override
        public void onActivityStopped(Activity activity) {
            activityCount--;
            if (isBackground()) {
                // initialization something
                isShowDialog = false;
            }
        }

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

        @Override
        public void onActivityDestroyed(Activity activity) {}

    }

}

Activity的生命周期

Activity生命周期

  • HOME键的执行顺序:onPause->onStop->onRestart->onStart->onResume.
  • BACK键的顺序: onPause->onStop->onDestroy->onCreate->onStart->onResume.
  • onPause不要做太耗时的工作.
  • onCreate 与 onDestory 匹配.
  • onStart 与 onStop 匹配.
  • onResume 与 onResume 匹配.
  • onStart 与 onResume 都表示在前台运行, 区别在于 onStart 不可见, onResume 可见.

参考资料:
1. http://blog.csdn.net/lfdfhl/article/details/51045414

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nukix

如果觉得对你有帮助,欢迎打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值