在Android系統(tǒng)中,有一種永久性應(yīng)用。它們對(duì)應(yīng)的AndroidManifest.xml文件里,會(huì)將persistent屬性設(shè)為true。
android:persistent="true"
我們知道,persistent一詞的意思是“持久”,那么persistent應(yīng)用的意思又是什么呢?簡(jiǎn)單地說,這種應(yīng)用會(huì)頑固地運(yùn)行于系統(tǒng)之中,從系統(tǒng)一啟動(dòng),一直到系統(tǒng)關(guān)機(jī)。
為了保證這種持久性,persistent應(yīng)用必須能夠在異常出現(xiàn)時(shí),自動(dòng)重新啟動(dòng)。在Android里是這樣實(shí)現(xiàn)的。每個(gè)ActivityThread中會(huì)有一個(gè)專門和AMS通信的binder實(shí)體——final ApplicationThread mAppThread。這個(gè)實(shí)體在AMS中對(duì)應(yīng)的代理接口為IApplicationThread。
當(dāng)AMS執(zhí)行到attachApplicationLocked()時(shí),會(huì)針對(duì)目標(biāo)用戶進(jìn)程的IApplicationThread接口,注冊(cè)一個(gè)binder訃告監(jiān)聽器,一旦日后用戶進(jìn)程意外掛掉,AMS就能在第一時(shí)間感知到,并采取相應(yīng)的措施。如果AMS發(fā)現(xiàn)意外掛掉的應(yīng)用是persistent的,它會(huì)嘗試重新啟動(dòng)這個(gè)應(yīng)用。
參考鏈接