如何判斷APP應(yīng)用程序前臺(tái)和后臺(tái)切換

1遭商、問題的緣由

當(dāng)APP應(yīng)用程序是通過socket通信,或者SignalR通信時(shí)斟叼,或者像某些長連接如聊天的一些應(yīng)用秤朗,為了讓APP應(yīng)用處于一個(gè)與服務(wù)器進(jìn)行連接通信的長連接狀態(tài)時(shí),減少資源的耗損等時(shí)昼汗。需要解決該現(xiàn)象問題肴熏。當(dāng)然,如果我們一直進(jìn)行長連接通信也行顷窒,如QQ蛙吏、微信等,但是有些應(yīng)用沒必要怎么做鞋吉,畢竟這只是改應(yīng)用的一個(gè)小模塊鸦做。

2、解決問題方式

由以上問題谓着,我們可以發(fā)現(xiàn)泼诱,一般是在APP處于后臺(tái)時(shí)關(guān)閉通信,然后處于前臺(tái)時(shí)赊锚,進(jìn)行通信連接就可以了治筒,那么我們該怎么做呢?

1改抡、一般在什么情況下會(huì)出現(xiàn)APP處于后臺(tái)矢炼,這是一個(gè)我們必須探討的問題,然后呢阿纤,當(dāng)APP處于前臺(tái)時(shí)句灌,要如何進(jìn)行邏輯代碼編寫方式進(jìn)行通信呢等等?

2欠拾、在一般情況下胰锌,我們都知道當(dāng)點(diǎn)擊HOME鍵時(shí),APP會(huì)處于后臺(tái)藐窄,并執(zhí)行Activity的 onPuase()资昧、onStop() 兩個(gè)生命周期,但是問題是并不是只有點(diǎn)擊HOME鍵才出現(xiàn)APP在后臺(tái)荆忍。所以我們可以同=通過Application的全局狀態(tài)來監(jiān)聽當(dāng)前APP應(yīng)用是否處于后臺(tái)格带,或者運(yùn)行在前臺(tái)的作用撤缴。

3、代碼code

創(chuàng)建全局的MyApp 記得在manifests添加 android:name="MyApp"屬性

public class MyApp extends Application implements Application.ActivityLifecycleCallbacks {

    int lifecyclecount = 0;
    private static final String TAG = MyApp.class.getSimpleName();
    @Override
    public void onCreate() {
        super.onCreate();

        initLifecycleCallback();
        }
        
    private void initLifecycleCallback() {
        registerActivityLifecycleCallbacks(this);
    }
    
    @Override
    public void onActivityCreated(Activity activity, Bundle bundle) {

    }

    @Override
    public void onActivityStarted(Activity activity) {
        if(lifecyclecount == 0){
            Log.e(TAG, "當(dāng)前狀態(tài)處于前臺(tái)>>>>Started" + activity);
        }
        lifecyclecount++;
    }

    @Override
    public void onActivityResumed(Activity activity) {

    }

    @Override
    public void onActivityPaused(Activity activity) {

    }

    @Override
    public void onActivityStopped(Activity activity) {
        lifecyclecount--;
        if (lifecyclecount == 0) {
            Log.e(TAG, "當(dāng)前狀態(tài)處于后臺(tái)>>>>Stopped" + activity);
        }
    }

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

    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }
}

一般在BaseActivity進(jìn)行對一下代碼添加

private boolean isCurrenApptRunningForeground = true;
    private static final String TAG = BaseActivity.class.getSimpleName();
    @Override
    protected void onStart() {
        super.onStart();
        if (!isCurrenApptRunningForeground) {
            Log.e(TAG, "App應(yīng)用程序處于前臺(tái)中...");
            //進(jìn)行邏輯處理如果與服務(wù)器連接斷開叽唱,就重新連接
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        isCurrenApptRunningForeground = isAppRunningForeground();
        if (!isCurrentRunningForeground) {
            Log.e(TAG, "App應(yīng)用程序處于后臺(tái)中...");
            //可以斷開服務(wù)器連接,相關(guān)需要等
        }
    }

    public boolean isAppRunningForeground() {
        ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> appProcessInfos = activityManager.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessInfos) {
            if (appProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                if (appProcessInfo.processName.equals(this.getApplicationInfo().processName)) {
                    Log.e(TAG, "處于前臺(tái)運(yùn)行中...");
                    return true;
                }
            }
    }
    Log.e(TAG, "處于后臺(tái)運(yùn)行中...");
    return false;           
}

4屈呕、對于這樣的狀態(tài),我們已經(jīng)完成了棺亭,所以大家可以在試試這樣的方式虎眨,簡潔的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镶摘,一起剝皮案震驚了整個(gè)濱河市嗽桩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凄敢,老刑警劉巖碌冶,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贡未,居然都是意外死亡种樱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門俊卤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫩挤,“玉大人,你說我怎么就攤上這事消恍∑裾眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵狠怨,是天一觀的道長约啊。 經(jīng)常有香客問我,道長佣赖,這世上最難降的妖魔是什么恰矩? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮憎蛤,結(jié)果婚禮上外傅,老公的妹妹穿的比我還像新娘。我一直安慰自己俩檬,他們只是感情好萎胰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棚辽,像睡著了一般技竟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屈藐,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天榔组,我揣著相機(jī)與錄音熙尉,去河邊找鬼。 笑死搓扯,一個(gè)胖子當(dāng)著我的面吹牛骡尽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播擅编,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼箫踩!你這毒婦竟也來了爱态?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤境钟,失蹤者是張志新(化名)和其女友劉穎锦担,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慨削,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洞渔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缚态。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磁椒。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖玫芦,靈堂內(nèi)的尸體忽然破棺而出浆熔,到底是詐尸還是另有隱情,我是刑警寧澤桥帆,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布医增,位于F島的核電站,受9級(jí)特大地震影響老虫,放射性物質(zhì)發(fā)生泄漏叶骨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一祈匙、第九天 我趴在偏房一處隱蔽的房頂上張望忽刽。 院中可真熱鬧,春花似錦菊卷、人聲如沸缔恳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歉甚。三九已至,卻和暖如春扑眉,著一層夾襖步出監(jiān)牢的瞬間纸泄,已是汗流浹背赖钞。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留聘裁,地道東北人雪营。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像衡便,于是被迫代替她去往敵國和親献起。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容