activityy的啟動模式有哪些诗芜?是什么含義瞳抓?
答:在android里,有4種activity的啟動模式绢陌,分別為:
“standard” (默認(rèn))
“singleTop”
“singleTask”
“singleInstance”
它們主要有如下不同:
1. 如何決定所屬task “standard”和”singleTop”的activity的目標(biāo)task挨下,和收到的Intent的發(fā)送者在同一個task內(nèi),除非intent包括參數(shù)FLAG_ACTIVITY_NEW_TASK脐湾。 如果提供了FLAG_ACTIVITY_NEW_TASK參數(shù)臭笆,會啟動到別的task里。 “singleTask”和”singleInstance”總是把activity作為一個task的根元素秤掌,他們不會被啟動到一個其他task里愁铺。
2. 是否允許多個實例 “standard”和”singleTop”可以被實例化多次,并且存在于不同的task中闻鉴,且一個task可以包括一個activity的多個實例茵乱; “singleTask”和”singleInstance”則限制只生成一個實例,并且是task的根元素孟岛。 singleTop要求如果創(chuàng)建intent的時候棧頂已經(jīng)有要創(chuàng)建 的Activity的實例瓶竭,則將intent發(fā)送給該實例,而不發(fā)送給新的實例渠羞。
3. 是否允許其它activity存在于本task內(nèi) “singleInstance”獨占一個task斤贰,其它activity不能存在那個task里;如果它啟動了一個新的activity次询,不管新的activity的launch mode 如何荧恍,新的activity都將會到別的task里運行(如同加了FLAG_ACTIVITY_NEW_TASK參數(shù))。 而另外三種模式屯吊,則可以和其它activity共存送巡。
4. 是否每次都生成新實例 “standard”對于沒一個啟動Intent都會生成一個activity的新實例; “singleTop”的activity如果在task的棧頂?shù)脑捄行叮瑒t不生成新的該activity的實例骗爆,直接使用棧頂?shù)膶嵗駝t蔽介,生成該activity的實例淮腾。 比如現(xiàn)在task棧元素為A-B-C-D(D在棧頂)糟需,這時候給D發(fā)一個啟動intent,如果D是 “standard”的谷朝,則生成D的一個新實例,棧變?yōu)锳-B-C-D-D武花。 如果D是singleTop的話圆凰,則不會生產(chǎn)D的新實例,棧狀態(tài)仍為A-B-C-D 如果這時候給B發(fā)Intent的話体箕,不管B的launchmode是”standard” 還是 “singleTop” 专钉,都會生成B的新實例,棧狀態(tài)變?yōu)锳-B-C-D-B累铅。 “singleInstance”是其所在棧的唯一activity跃须,它會每次都被重用。 “singleTask”如果在棧頂娃兽,則接受intent菇民,否則,該intent會被丟棄投储,但是該task仍會回到前臺第练。 當(dāng)已經(jīng)存在的activity實例處理新的intent時候,會調(diào)用onNewIntent()方法 如果收到intent生成一個activity實例玛荞,那么用戶可以通過back鍵回到上一個狀態(tài)娇掏;如果是已經(jīng)存在的一個activity來處理這個intent的話,用戶不能通過按back鍵返回到這之前的狀態(tài)
81勋眯、 什么情況會導(dǎo)致Force Close 婴梧?如何避免如何避免如何避免如何避免?能否捕獲導(dǎo)致其的異常
答:程序出現(xiàn)異常客蹋,比如nullpointer塞蹭。 避免:編寫程序時邏輯連貫,思維縝密嚼酝。能捕獲異常浮还,在logcat中能看到異常信息