android 判斷切換後臺 判斷按下home鍵

android 判斷切換後臺 判斷按下home鍵

(本文是原來的博客用markdown進行重新排版)

寫這個博客不是爲了實現監聽home鍵,而是判斷切換後臺 ,說過不寫一些沒意思的博客,監聽home鍵 或者屏蔽home鍵的方法,請百度。

我這個篇博客只是想寫兩種狀態的判斷:

1.應用切換到後臺的監聽或者說是判斷。
2.應用切換到後臺後重新打開的監聽判斷。

那麼,問題來了,假如你的公司有個需求:在app每次切換到後臺之後,判斷當前跟一個建立socket連接的服務器是否斷開。
臥槽,你們城裏人需求真多,好煩,這個好難實現。

解決方案大概有兩種方案,應用後臺後重新開的的時候走了那些方法,這個看下activity的生命週期,看下好像沒法做判斷。有些情況比較複雜,每次都走resume,但又不是每次都走onreate onstart一些列的方法。

那麼這個套路走步不通,我們試着在activity被隱藏的地方入手,activity a跳轉到activity b的時候pause了,stop了,那麼,在自己的應用內activity的跳轉也會觸發這個東西。

但是他跟按下home鍵,或者在我們的app裏打開其他應用的區別在哪裏呢?
解:區別在於切換到其他應用,當前在前臺的應用就不是我們自己的包了。那麼,我們可以用過獲取當前app的前臺應用的包名來判斷是否是我們自己的app,即可實現。

但是,問題又來了,如果我們最後一個頁面finish了呢,不也是的嗎 ?
這個切換後臺和finish能否區分分開呢?

解: 可以。
那麼,這樣子所有的問題都解決了切換到後臺的判斷了。切換到後臺的時候做一個記錄就行了,記錄下當前是否被後臺,下次重新打開的時候判斷下是否之前被後臺過,如果被後臺過,就去判斷下sokect是否在連接中即可,還要把後臺的記錄給重置。

理論上流程就是這樣子,stop的時候,判斷activitymanage中獲取最前臺的那個應用是否是本應用 ,不是的話就被後臺了,還有就是價格判斷如果被finish了,就不做記錄了。

好了,上代碼:


    private boolean isFinished = false;
    private final String  RUN_SP_KEY="isRunningBackGround";
    @Override
    public void finish() {
        super.finish();
        isFinished = true;
    }
   //如果isFinished等於false,表示當前Activity僅切換到後臺運行,並沒有退出。
    @Override
    protected void onStop() {
        super.onStop();
        if (!isFinished) {
            //括號內部的代碼請單獨提成一個方法  我這裏是爲了視覺 懶了
            String packageName="com.XXX.mypackagename";//我們自己的應用的包名
            String topActivityClassName= PackageUtils.getTopActivityName(this);
            if (packageName!=null&&topActivityClassName!=null && !topActivityClassName.startsWith(packageName))
            {
                //app已經後臺
                SPUtils.put(this, RUN_SP_KEY, true);
            }
        }
    }

上面這是在stop的時候的處理,接下來的是啓動的時候的處理。

    protected void onResume() {
        super.onResume();
        boolean isReOpen = (Boolean) SPUtils.get(this, RUN_SP_KEY, false);
        if (isReOpen) {已經斷開
            if (isConnect()) {
                //這個值需要重置
                SPUtils.put(this, RUN_SP_KEY, false);

            }else {
                showConnectPopupWindow();//彈出斷開連接提示的poupwindow
            }
        }

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