Android APP存活檢測方式
稍微深入了解過Android的開發(fā)者都知道,Android中每個APP的中的所有組件的生命周期狀態(tài)都是由ActivityManagerService(簡稱:AMS)進程來維護的,所以當某個APP被kill或意外crash時,AMS進程會第一時間維護APP的組件。
我們今天不會看AMS進程維護APP的流程,只看AMS是通過什么手段第一時間得到的通知,我們是否能夠?qū)⑦@種手段應用到我們的APP中,在多進程環(huán)境下,通過這種手段進程間互相監(jiān)控起到一個守護的作用。
我們知道一個APP對應唯一一個ActivityThread,這也是一個APP的真正的入口,當ActivityThread#main執(zhí)行時,就會附著到AMS進程,后續(xù)就由AMS進程維護APP的狀態(tài)。那么關鍵點就在attach上。
見以下代碼:ActivityManagerService#attachApplicationLocked()
private final boolean attachApplicationLocked(IApplicationThread thread,
int pid) {
...
final String processName = app.processName;
try {
AppDeathRecipient adr = new AppDeathRecipient(
app, pid, thread);
<span style="background-color: rgb(255, 255, 51);"><strong>thread.asBinder().linkToDeath(adr, 0);</strong></span>
app.deathRecipient = adr;
} catch (RemoteException e) {
app.resetPackageList(mProcessStats);
startProcessLocked(app, "link fail", processName);
return false;
}
...
return true;
}
上面被高亮顯示的這行代碼,就是關鍵點。 使用的是IBinder#linkToDeath來完成的。linkToDeath方法的第一個參數(shù)接收一個android.os.IBinder.DeathRecipient的接口實現(xiàn),用來接收app death的通知。
當然也可以通過IBinder#unlinkToDeath來取消監(jiān)聽。
感興趣的同學,可以進入源碼查看詳細的注釋,這里就不在貼注釋。 源碼中DeathRecipient的實現(xiàn)是AppDeathRecipient來完成的, 這個處理中主要是AMS來清理當前APP進程對應的組件資源。
通過上面的了解,在我們的APP中要使用以上手段,多個進程之間要起到守護對方的作用,可能就需要得到對方的IBinder對象。
獲取IBinder對象的方法,參考如下:
1.通過Context#bindService,在onServiceConnected上接收IBinder對象;
2.通過創(chuàng)建android.os.Messenger對象,然后通過intent將此對象傳遞給對方進程;
3.直接new Binder重寫onTransact,然后通過intent將此Binder對象傳遞給對方進程;
以上這篇Android APP存活檢測方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Android高版本API方法如何在低版本系統(tǒng)上做兼容性處理淺析
這篇文章主要給大家介紹了關于Android高版本API方法如何在低版本系統(tǒng)上做兼容性處理的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-08-08
Android傳遞參數(shù)給webView的h5頁面3種方法
最近幾年隨著h5的強勢崛起,越來越多的公司運用h5開發(fā)或者采用h5與android的混合開發(fā),這篇文章主要給大家介紹了關于Android傳遞參數(shù)給webView的h5頁面的3種方法,需要的朋友可以參考下2024-08-08
Android實現(xiàn)簡單音樂播放器(MediaPlayer)
這篇文章主要為大家詳細介紹了Android實現(xiàn)簡單音樂播放器MediaPlayer的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
android 為應用程序創(chuàng)建桌面快捷方式技巧分享
手機裝的軟件過多,找起來很不方便,所以在主頁面有一個快捷方式的話會很不錯的,本文將介紹如何實現(xiàn),需要了解跟多的朋友可以參考下2012-12-12
Android基于ListView實現(xiàn)類似QQ空間的滾動翻頁與滾動加載效果
這篇文章主要介紹了Android基于ListView實現(xiàn)類似QQ空間的滾動翻頁與滾動加載效果,涉及ListView相關屬性與方法的操作技巧,需要的朋友可以參考下2016-08-08
Android實現(xiàn)觸發(fā)html頁面的Button控件點擊事件方式
這篇文章主要介紹了Android實現(xiàn)觸發(fā)html頁面的Button控件點擊事件方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android自定義TimeButton實現(xiàn)倒計時按鈕
這篇文章主要為大家詳細介紹了Android自定義TimeButton實現(xiàn)倒計時按鈕,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12

