一大波面試就要靠近,趕緊總結總結一些基礎問題
注1:activity之間通過intent進行通信。(在intent 的描述結構中,有兩個最重要的部分:動作和動作對應的資料)
注2:activity與view的差別
1) activity是四大元件中唯一一個用來和使用者進行互動的元件。可以說activity就是android的視圖層。
2) 如果再細化,activity相當于視圖層中的控制層,是用來控制和管理view的,真正用來顯示和處理事件的實際上是view。
3) 每個activity内部都有一個window對象, window對象包含了一個decorview(實際上就是framelayout),我們通過setcontentview給activity設定顯示的view實際上都是加到了decorview中。
當一個activity被kill之前它可以調用onsaveinstancestate來儲存目前activity的狀态資訊
上一張經典的圖來感受一下
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIzczM0ADN1kTM3ADOwUTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
【oncreate】
;當activity第一次被執行個體化的時候系統會調用,,整個生命周期隻調用1次這個方法,通常用于初始化設定: 1、為activity設定所要使用的布局檔案2、為按鈕綁定監聽器等靜态的設定操作
【onstart()】
當activity可見未獲得使用者焦點不能互動時系統會調用
【onrestart()】
當activity已經停止然後重新被啟動時系統會調用
【onresume()】
當activity可見且獲得使用者焦點能互動時系統會調用
【onpause】
當系統将要啟動另一個 activity時調用。此方法主要用來将未儲存的變化進行持久化,停止類似動畫這樣耗費cpu的動作等。
比如:
(1)當系統而不是使用者自己出于回收記憶體時,關閉了activity 之後。使用者會期望當他再次回到這個activity 的時候,它仍保持着上次離開時的樣子。此時用到了onsaveinstancestate(),方法onsaveinstancestate()用來儲存 activity被殺之前的狀态,在onpause()之前被觸發,
(2)當系統為了節省記憶體銷毀了activity(使用者本不想銷毀)時就需要重寫這個方法 了,當此activity再次被執行個體化時會通過oncreate(bundle savedinstancestate)将已經儲存的臨時狀态資料傳入因為onsaveinstancestate()方法不總是被調用,觸發條件為(按 下home鍵,按下電源按鍵關閉螢幕,橫豎屏切換情況下),應該僅重寫onsaveinstancestate()來記錄activity的臨時狀态, 而不是持久的資料。應該使用onpause()來存儲持久資料。
【onstop】
當activity被新的activity完全覆寫不可見時被系統調用
【ondestroy()】
當activity(使用者調用finish()或系統由于記憶體不足)被系統銷毀殺掉時系統調用,(整個生命周期隻調用1次)用來釋放oncreate ()方法中建立的資源,如結束線程等
首先必須說明是activity是以棧的形式存放的。
【standard】
預設模式,可以不用寫配置。在這個模式下,都會預設建立一個新的執行個體。是以,在這種模式下,可以有多個相同的執行個體,也允許多個相同activity疊加。即不管有沒有已存在的執行個體,都生成新的執行個體
【singletop】
可以有多個執行個體,但是不允許多個相同activity疊加。即如果activity在棧頂的時候,啟動相同的activity,不會建立新的執行個體,而會調用其onnewintent方法。
【singletask】
隻有一個執行個體。在同一個應用程式中啟動它的時候,若activity不存在,則會在目前task建立一個新的執行個體,若存在,則會把task中在其之上的其它activity destory掉并調用它的onnewintent方法。如果是在别的應用程式中啟動它,則會建立一個task,并在該task中啟動這個activity,singletask允許别的activity與其在一個task中共存,也就是說,如果我在這個singletask的執行個體中再打開新的activity,這個新的activity還是會在singletask的執行個體的task中。
【singleinstance】 隻有一個執行個體,并且這個執行個體獨立運作在一個task中,這個task隻有這個執行個體,不允許有别的activity存在。
關于onnewintent方法截個圖說明一下
具體在方式需要在清單檔案中配置
如:<activity android:name="com.example.mobilesafe.watchdogactivity"
android:launchmode="singleinstance"/>
主要有倆種
【startactivity()】 在一個activity中調用startactivity()方法。
直接啟動activity,不帶請求碼。
【startactivityforresult()】 在一個activity中調用startactivityforresult()方法。
可以一次性完成這項任務,當程式執行到這段代碼的時候,頁面會跳轉到下一個activity,
而當這個activity被關閉以後(this.finish()),程式會自動跳轉會第一個activity,并調用前一個activity的onactivityresult( )方法
帶請求碼啟動activity。
注:其實startactivity()本質就是startactivityforresult(),在startactivity()源碼中還是調用了startactivityforresult(),将其第二個參數設定為-1而已,是以他們本質上沒啥差別,startactivity()隻是将startactivityforresult()做了一個簡單封裝而已。
轉自:http://blog.csdn.net/xsf50717/article/details/47344067