Android App components
僅僅作為AndroidDeveloper的學習筆記
Introduction to Activities
Activities是Android四大元件之一,使用者可與其提供的螢幕進行互動,以執行撥打電話、拍攝照片、傳送電子郵件或檢視地圖等操作。 每個 Activity 都會獲得一個用於繪製其使用者介面的視窗。視窗通常會充滿螢幕,但也可小於螢幕並浮動在其他視窗之上。
在manifest.xml中的寫法為:
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >
Activity Lifecycle
- 整個生命週期(
onCreate()
->onDestroy()
) - 可見生命週期(
onStart()
->onStop()
) - 前臺生命週期(
onResume()
->onPause()
)
整個生命週期和前臺生命週期很好理解,那麼可見生命週期和前臺生命週期有什麼區別呢?因為螢幕上可以存在多個Activity,比如在一個Activity1中打開了一個對話方塊(這個對話方塊也是一個Activity,記為Activity2),此時使用者既可以看到Activity1也可以看到Activity2,此時Activity2處於前臺生命週期,Activity1處於可見生命週期。如下圖所示,當點選START DIALOGACTIVITY按鈕時,MainActivity會呼叫onPause()方法,而不是onStop()。
完整的生命週期示意圖如下圖所示:
Tasks and Back Stack
Android中的Activity是可以層疊的,沒啟動一個新的Activity,就會覆蓋在原有的Activity之上,然後點選Back鍵會銷燬最上面的Activity,下一個Activity就會重新顯示出來。可以思考一下這種層疊的結構怎麼實現?沒錯,就是棧,First in Last out,假設啟動順序為Activity1 -> Activity2 -> Activity3,那麼棧中的結構是,Activity3在頂部,Activity1在底部。
When the user presses the Back button:
在Android中,是使用Task來管理Activity的,一個Task就是一個這樣的棧結構,這個棧也被稱為Back Stack。
launchMode:
- standard(the default mode):每啟動一個新的Activity,都會建立一個新的例項
- singleTop:如果啟動的Activity已經在棧頂,則不會再建立例項
- singleTask:只要啟動的Activity在棧裡面,則不會再建立例項,並且這個Activity之上的所有Activity全部出棧,如果沒有在棧裡面,則建立例項
- singleInstance:這種模式是為了不同的APP能共享Activity,啟動的Activity會在一個單獨的Back Stack中,這個Back Stack只有這一個Activity。
這裡我畫了一個示例圖: