中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Android判斷APP是否在前臺(tái)運(yùn)行

2018-07-20    來源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

APP開發(fā)中經(jīng)常會(huì)遇到這種需求,需要檢查當(dāng)前的APP是不是可見的,比如,如果是可見的就維持一個(gè)socket長(zhǎng)連接,如果切到后臺(tái)不可見了,就斷開這個(gè)連接。Android本來并不允許APP去監(jiān)聽home鍵事件,所以我們沒發(fā)像iOS那樣通過監(jiān)聽home鍵事件來做對(duì)應(yīng)的處理。不過還好Android的Activity的生命周期給我們提供了一種解決這個(gè)問題的方法,我們只需要在每個(gè)Activity的onStart和onStop中去維持一個(gè)計(jì)數(shù),如果這個(gè)數(shù)值大于0,就表示我們的APP還有Activity是在前臺(tái)運(yùn)行的,等于0,就表示APP已經(jīng)被切換到后臺(tái)。

說到這里你可能要想,是不是直接修改我的APP的BaseActivity,在基類里做計(jì)數(shù)的事情就好了。當(dāng)然,這是最直接的一種方法。但是,這種方法需要你去修改自己的基類代碼,侵入性太強(qiáng),我不是很喜歡這種方法。更好的方式是使用sdk提供的Application.ActivityLifecycleCallbacks接口。下面的代碼展示了如何實(shí)現(xiàn)這個(gè)接口:

public class MyActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks { 
    private int foregroundActivities;
    private boolean hasSeenFirstActivity;
    private boolean isChangingConfiguration;
    @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    }
 
    @Override public void onActivityStarted(Activity activity) {
        mForegroundActivities++;
        if (hasSeenFirstActivity && foregroundActivities == 1 && !isChangingConfiguration) {
            applicationDidEnterForeground(activity);
        }
        hasSeenFirstActivity = true;
        isChangingConfiguration = false;
    }
    @Override public void onActivityResumed(Activity activity) {
    }
 
    @Override public void onActivityPaused(Activity activity) {
    }
 
    @Override public void onActivityStopped(Activity activity) {
        foregroundActivities--;
        if (foregroundActivities == 0) {
            applicationDidEnterBackground(activity);
        }
        isChangingConfiguration = activity.isChangingConfigurations();
    }
 
    @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    }
 
    @Override public void onActivityDestroyed(Activity activity) {
    }
}

實(shí)現(xiàn)了自己的類之后,就可以調(diào)用Application的registerActivityLifecycleCallback方法,將我們的類MyActivityLifecycleCallbacks注冊(cè)進(jìn)去,這樣就可以實(shí)現(xiàn)對(duì)Activity生命周期的監(jiān)聽了。

標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:php返回當(dāng)前日期或者指定日期是星期幾

下一篇:php通過POST方式提交表單信息代碼范例