android專案裡要判斷是home按鍵。可是home鍵不提供監聽。麻煩。。
在應用裡,按了home鍵就是被調到後台,再回到應用就是後台調到前台,那看看有沒有可以判斷應用前後臺的方法吧。
如果整個專案只有乙個activity,那麼簡單了,利用生命週期函式,在onresume()方法裡可以簡單判斷後台還是前台。
可是專案裡有n多個activity,呼叫關係複雜,生命週期耦合太多,,判斷方法容易出錯。
網上有辦法通過activitymanager獲得棧頂的activity的包名,然後判斷是不是自己應用。
沒有採用,因為activity實在太多,每乙個都加入這個方法,或者加入方法呼叫,這個工作量阿。。。
當然這也是乙個備選方案了。。。
忽然發現專案裡所有activity都繼承自乙個baseacitvity(baseacitvity再繼承自android的acitvity類)。看來可以加判斷方法到這個baseacitvity類裡。
但是每一次進入都要呼叫呼叫這個方法,獲取服務,獲取列表,獲取應用資訊,最後只為了獲得乙個標記位的值,感覺好浪費。
繼續作為備選方案吧。。
重新思考。既然已經被調到後台,那就是說,當前應用的所有頁面都不在前台顯示,
也就是說,當前應用的所有acivity都至少走完了onpause()方法。
而且,我們應用的所有acitivity都繼承自乙個baseacitvity,那麼在baseacitvity的onpause()裡做個計數吧,
計數方法如下:
baseacitvity的onresume()或者onstart()方法裡,++count;
baseacitvity的onpause()或者onstop()方法裡,--count;
判斷方法如下:
在onrestart()方法裡判斷count,如果<=0(事實上,不應該小於0),那麼就是從後台進入了前台。
如此,應用裡每乙個activity都會在前台時++count,移入後台時--count。
count好像堆疊計數,前台顯示時就是push,計數加1;後台不顯示時就是pop,計數減1。
堆疊裡有activity就是應用在前台,計數肯定》1;計數為0說明堆疊沒有activity,說明沒有activity在顯示,應用在後台。
由此判斷得以簡單高效判斷應用自身前後臺狀態,間接實現(部分的)home鍵判斷。
之所以是部分的home鍵判斷,因為這個方法只能判斷前台後台狀態,不是根據home的key事件來判斷的。
所以,如果應用被其他應用暫時中斷,比如來電,鎖屏等等,也會被當作home事件來處理。
後記:這個方法在滅屏時會出問題,我是在onresume和onstop方法裡計數,滅屏再點亮只會執行onpause和onpause,這樣計數就會錯亂。
所以對這個方法改進一下:
1 baseactivity中宣告乙個靜態的hashmap。
2 每乙個繼承自baseactivity的activity需要實現乙個方法getacitivityid(),返回乙個id,每個acitivityid都不相同。
3 在oncreate、onstart、onresume 裡操作hashmap,新增getacitivityid()返回值,如果存在則不新增。
4 在ondestroy、onstop、onpause裡操作hashmap,刪除getacitvityid()返回值,如果不存在則不操作。
5 子acitvityid可以在呼叫super.onsart()或者super.onreume()前,判斷hashmap的長度,如果是0,則是從後台調入前台的。
Android對App前後臺執行狀態的判斷
param context return public static boolean context context if processinfo.processname.equals context.getpackagename return true return false 和 param c...
Android判斷前後臺狀態
本人在開發中就遇到了需要判斷前後台來展示廣告的需求。一開始,我是想要根據生命週期來進行判斷展示,但是使用生命周的判斷,在對於多介面activity之間跳轉時就無法準確的判斷前後狀況。於是在網上找了不少資料,但是找到的 好多,最終我整合了多方資料完成了此功能,在這書寫整理一下,同時希望能幫助到他人。下...
nginx實現前後臺分離部署
如標題所示,至於為什麼要前後臺分離部署,個人理解的原因有三 一 便於部署 前台 由nginx啟動,無需再做前後臺整合打包,節省公升級維護資源。二 便於維護 由於前後臺分離而不是整合在乙個tomcat中執行,此時如果需要對前端 進行迭代部署時,僅需要對特定目錄下的前端 進行替換即可,無需前後臺整合打包...