黃世仁之監聽程序前後臺切換

兩種方法,一是在activity裏,二是在  Applicition裏

一、在activity裏:這裏分兩種情況,1是單個activity監聽,2是全局監聽,
    一般都會全局監聽,加在baseActivity裏,方法一樣
 /**
     *  app是否處於前臺
     */
    public static boolean isActive;
    /**
     * 恢復,可見
     */
    @Override
    protected void onResume() {
        if (!isActive) {
            isActive = true;
            LogUtil.i("程序從後臺喚醒");
            onBackApp();
        }
        super.onResume();
    }
    /**
     * 停止,不可見
     */
    @Override
    protected void onStop() {
        if (!isAppOnForeground()) {
            //app 進入後臺
            LogUtil.i("程序進入後臺");
            onLeaveApp();
        }
        super.onStop();
    }
    /**
     * 從後臺返回app
     */
    protected void onBackApp() {
    }

    /**
     * 程序進入後臺
     */
    protected void onLeaveApp() {

    }

二、在  Applicition裏

 

/**
     * 計數器
     */
    private int appCount = 0;
    private Boolean isActive = false;
    @Override
    public void onCreate() {
        super.onCreate();
        actionListener();
    }
    private void actionListener() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            }

            @Override
            public void onActivityStarted(Activity activity) {
                appCount++;
                if (isActive) {
                    //應用從後臺回到前臺 需要做的操作
                    onBackApp(activity);
                }
            }

            @Override
            public void onActivityResumed(Activity activity) {
            }

            @Override
            public void onActivityPaused(Activity activity) {
            }

            @Override
            public void onActivityStopped(Activity activity) {
                appCount--;
                if (appCount == 0) {
                    //應用進入後臺 需要做的操作
                    onLeaveApp(activity);
                }
            }

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

            @Override
            public void onActivityDestroyed(Activity activity) {
            }
        });
    }

    /**
     * 從後臺返回app
     *
     * @param activity
     */
    private void onBackApp(Activity activity) {
        isActive = false;
        LogUtil.i("vvv從後臺回到前臺");
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章