目前做的項(xiàng)目都是在安卓板上使用的,需要一直保持應(yīng)用在最頂層
最早的邏輯是判斷RunningTask,那時候用的安卓板還是4.4的,后來板子升級到了6.0,該方法就失效了(在5.0已經(jīng)廢棄)
6.0用的是以下的方法
https://effmx.com/articles/tong-guo-android-fu-zhu-gong-neng-accessibility-service-jian-ce-ren-yi-qian-tai-jie-mian/
當(dāng)時因?yàn)闀r間倉促,所以也沒有細(xì)心研究,是修改的老代碼,那時候是單獨(dú)一個應(yīng)用,雖說能保證了指定應(yīng)用永遠(yuǎn)處于最上層,但是設(shè)備配置和維護(hù)就比較麻煩,第一是要安裝兩個應(yīng)用,第二無障礙輔助需要手動去設(shè)置(可以查找到自動申請的代碼),第三想跳出應(yīng)用改個設(shè)置都很麻煩,設(shè)置的間隔時間很短,長了又容易出問題。
所以后來在重構(gòu)項(xiàng)目的時候,就沒再考慮這種方式,用了下面的方法
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){});
可以抓到程序因異常導(dǎo)致關(guān)閉的情況,就想著在這里進(jìn)行重啟應(yīng)用,就省掉了之前用來檢測的應(yīng)用
一開始感覺基本能滿足,但是在實(shí)際使用的這一年中,會出現(xiàn)很多APP退出的情況,當(dāng)時也知道在無響應(yīng)的時候強(qiáng)制結(jié)束應(yīng)用,并不會觸發(fā),想著多優(yōu)化一下,盡量去避免這種問題。
但是奈何后期出現(xiàn)問題的設(shè)備較多,也無法去復(fù)現(xiàn),現(xiàn)在打算再回到最初的方式,不過準(zhǔn)備合成一個應(yīng)用,寫個Service去監(jiān)聽,然后設(shè)置個開關(guān),去啟動和關(guān)閉,默認(rèn)開啟,手動關(guān)閉后可進(jìn)行調(diào)試,關(guān)閉調(diào)試界面后自動開啟
https://blog.csdn.net/behindeye/article/details/85563204 ? 該文章有直接申請權(quán)限的代碼