Android四大組件之Activity


Intent介紹:
intent是一種"意圖",可以實現兩個Activity之間的跳轉,它分爲顯示意圖和隱式意圖兩種。
顯示意圖一般是在自己的而應用中的activity之間進行跳轉,給兩個參數傳入包名和要去的活動的類對象名稱,通過startActivity(intent)就可以啓動。

隱式意圖則一般是跳轉到其他應用的activity,一般需要通過配置一些詳細的intent信息,去匹配要跳轉到的那個activity在清單文件中註冊的意圖過濾器中的而一些數據,通過匹配則跳轉成功。

意圖的啓動方式有兩種,一種是沒有返回值的啓動startActivity
一種是有返回值的啓動startActivityForResult()。這種情況一般會跳轉到第二個頁面,在第二個頁面獲取想要的值之後再第二個頁面中調用finish()方法結束該activity,然後調用方的activity會在自己的方法中執行onActivityResult()方法,對返回值進行處理


intent還可以攜帶數據,通過intent.putExtra();進行數據的攜帶,在其他的活動中可以通過傳進來的Intent對象去獲取intent攜帶的數據,通過intent.getExtra()去拿數據。一般在intent對象沒有攜帶數據的則通過getResultData()方法獲取數據


活動有兩種啓動方式:
Intent intent = new Intent(MainActivity,OtherActivity.class );
一種是startActivity( intent ),這種啓動沒有返回的結果

另外一種是有返回結果值的啓動:
Intent intent = new Intent();
intent.putExtra(key,value);//存入值

startActivityForResult(intent);



------------------------------------------------------------------


任務棧:

打開一個activity叫進棧,關閉一個activity叫出棧
我們操作的Activity永遠是任務棧棧頂的Activity
任務棧是用來維護Activity的,是用來維護用戶的操作體驗



活動狀態:
1.運行狀態
當一個活動位於返回棧的棧頂時,這時活動就處於運行狀態。系統最不願意回收的就是處於運行狀態的活動,因爲這會帶來非常差的用戶體驗。
2.暫停狀態
當一個活動不再處於棧頂位置,但任然可見時,這時活動就進入了暫停狀態。因爲並不是每一個活動都會佔滿屏幕的,比如對話框形式的活動只會佔用屏幕中間的部分區域。處於暫停轉檯的活動任然是完全存活着的,系統也不願意去回收這種活動(因爲它還是可見的),只有在內存極低的情況下,系統纔會考慮去回收這種活動
3.停止狀態
當一個活動不再處於棧頂位置,並且完全不可見的時候,就進入了停止狀態。系統仍然會爲這種活動保存相應的狀態和成員變量,但是這並不是完全可靠的,當其他地方需要內存時,處於這種狀態的活動及有可能會被系統回收
4.銷燬狀態
當一個活動從返回棧中移除後就變成了銷燬狀態,系統最會傾向回收這種狀態的活動。


活動的生存期
oncreate 方法 當Activity第一次啓動的時候調用
onDestroy 方法 當Activity銷燬的時候調用
onStrat() 方法 當Activity變成可見的時候調用
onStop() 方法 當activity 不可見的時候調用
onResume()方法 當activity可以獲取焦點的時候 當界面的 按鈕可以被點擊了
onPause()方法 當失去焦點的時候調用 當按鈕不了可以被點擊的時候調用
onRestart()當界面重新啓動的時候調用

一般執行了onRestart()方法就會執行onStart()方法,所有一般只覆寫onStart()方法。


橫豎屏切換Activity的生命週期(橫豎屏切換的時候活動會銷燬然後重啓)
(1)爲了防止橫豎屏切換 生命週期會發生變化 所以把Activity配置如下
android:screenOrientation="portrait"
(2)爲了聲明週期不變化
android:configChanges="orientation|keyboardHidden|screenSize"







Activity的四種啓動模式(launchMode):
1.standard啓動模式
格式:android:launchMode="standard"
這種啓動模式在啓動了一個activity之後,該activity會添加到任務棧的最上面,再啓動一個該activity,那麼任務棧會再次添加一個該活動

2.singletop啓動模式
  1. singletop 單一頂部模式 在activity的配置文件中設置android:launchMode="singleTop"
如果任務棧的棧頂存在這個要開啓的activity,不會重新的創建activity,而是複用已經存在的activity。保證棧頂如果存在,不會重複創建。
應用場景:瀏覽器的書籤


3.singletask和singleinstance啓動模式
singetask 單一任務棧,在當前任務棧裏面只能有一個實例存在
當開啓activity的時候,就去檢查在任務棧裏面是否有實例已經存在,如果有實例存在就複用這個已經存在的activity,並且把這個activity上面的所有的別的activity都清空,複用這個已經存在的activity。保證整個任務棧裏面只有一個實例存在

應用場景:瀏覽器的activity
如果一個activity的創建需要佔用大量的系統資源(cpu,內存)一般配置這個activity爲singletask的啓動模式。

4.singleinstance啓動模式
singleInstance啓動模式非常特殊, activity會運行在自己的任務棧裏面(單獨開闢一個任務棧),並且這個任務棧裏面只有一個實例存在
如果你要保證一個activity在整個手機操作系統裏面只有一個實例存在,使用singleInstance
應用場景: 來電頁面(無論接到多少次電話,來電顯示頁面使用只有一個實例對象)

























































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章