一、手動(dòng)創(chuàng)建Activity
1. 創(chuàng)建 Activity
選擇文件夾? --->? 點(diǎn)擊右鍵? --->? New? --->??Activity? ?--->? ?Empty Views Activity


2.?創(chuàng)建 layout 布局文件
選擇res文件夾?--->??點(diǎn)擊右鍵? --->? New? --->??Directory? --->? 創(chuàng)建layout文件夾? --->? 選擇layout文件夾? --->??點(diǎn)擊右鍵? --->? New? --->??Layout Resource File




3.?打開main_activity.xml --->? 加入一個(gè)文本

4. 打開MainActivity? --->? 設(shè)置頁(yè)面視圖

5. 在 AndroidManifest 中配置主啟動(dòng)器?
<intent-filter>
? ? <action android:name="android.intent.action.MAIN"/>
? ? <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>


二、用法
1. 提示 Toast

tips:打開ViewBinding功能更方便獲取xml里面的元素
2. 菜單 Menu
2.1 創(chuàng)建 menu 文件
選擇res文件夾?--->??點(diǎn)擊右鍵? --->? New? --->? Android Resource Directory ?--->? 創(chuàng)建menu文件夾? --->? 選擇menu文件夾? --->??點(diǎn)擊右鍵? --->? New? --->??menu Resource File




2.2 創(chuàng)建菜單

2.3 在 MainActivity 中 顯示菜單 啟用菜單



3. 銷毀 finish()

4. 切換
4.1 顯式 Intent?
val intent = Intent(this,FirstActivity::class.java)
startActivity(intent)

4.2 隱式 Intent
4.2.1?內(nèi)部切換
val intent02 = Intent("com.example.appactivity.START_ACTION")
intent02.addCategory("com.example.appactivity.MY_CATEGORY")
startActivity(intent02)
<action android:name="com.example.appactivity.START_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.appactivity.MY_CATEGORY" />

4.2.1 外部切換
val intent03 = Intent(Intent.ACTION_VIEW)
intent03.data = Uri.parse("https://www.baidu.com")
startActivity(intent03)


4.3 傳遞數(shù)據(jù)
4.3.1 向下傳遞數(shù)據(jù)
4.3.2 向上傳遞數(shù)據(jù)

三、生命周期
1. Activity 狀態(tài)
1.1 運(yùn)行狀態(tài):在棧頂,全部可見,一般不會(huì)回收
1.2 暫停狀態(tài):不在棧頂,但是看得見,內(nèi)存極地才會(huì)回收
1.3 停止?fàn)顟B(tài):不在棧頂,頁(yè)面已經(jīng)看不見,內(nèi)存不夠就會(huì)回收
1.4 銷毀狀態(tài):已經(jīng)出棧了,直接回收
2. Activity 生存期
2.1 onCreate() 每個(gè)Activity中都重寫了這個(gè)方法,它會(huì)在 調(diào)用,應(yīng)該在這個(gè)方法中完成Activity的初始化操作,比如加載布局、綁定事件等。
2.2 onStart() 在Activity由不可見變?yōu)榭梢姷臅r(shí)候調(diào)用。
2.3 onResume() 在Activity準(zhǔn)備好和用戶進(jìn)行交互的時(shí)候調(diào)用。此時(shí)的Activity一定位于返回棧的棧頂,并且處于運(yùn)行狀態(tài)。
2.4 onPause() 在系統(tǒng)準(zhǔn)備去啟動(dòng)或者回復(fù)另一個(gè)Activity的時(shí)候調(diào)用。通常會(huì)在這個(gè)方法中將一些消耗CPU的資源釋放掉,以及保存一些關(guān)鍵數(shù)據(jù),但這個(gè)方法的執(zhí)行速度一定要快,不然會(huì)影響到新的棧頂Activity的使用。
2.5 onStop() 在Activity完全不可見的時(shí)候調(diào)用。它和onPause()方法的主要區(qū)別在于,如果啟動(dòng)新Activity是一個(gè)對(duì)話框式的Activity,那么onPause() 方法會(huì)得到執(zhí)行,而onStop() 方法并不會(huì)執(zhí)行。
2.6 onDestroy() 在Activity被銷毀之前調(diào)用。
2.7 onRestart() 在Activity由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)之前調(diào)用,也就是Activity被重新啟動(dòng)了。
四、啟動(dòng)模式
1.? standard:可以創(chuàng)建無(wú)數(shù)個(gè)Activity實(shí)例,每次啟動(dòng)都會(huì)創(chuàng)建一個(gè)該Activity的新實(shí)例 。(默認(rèn)的啟動(dòng)模式)(郵件)
2. singleTop:如果當(dāng)前Task的top是已經(jīng)正在啟動(dòng)的這個(gè)Activity,那么就不能重復(fù)啟動(dòng)。(登錄、推送通知欄...)
3. singleTask:這個(gè)Activity只能有一個(gè),且作為它所在的Task的root?Activity(檢查返回棧中是否有該Activity的實(shí)例,有則直接使用并且將該Activity之上的其它Activity統(tǒng)統(tǒng)出棧)。(主頁(yè)面、掃一掃、購(gòu)物、確認(rèn)訂單、付款...)
4. singleInstance:這個(gè)Activity只能有一個(gè),且它所在的Task也只能有它這一個(gè)Activity,是一個(gè)單獨(dú)的返回棧管理。(來(lái)電顯示、鎖屏鍵等系統(tǒng)應(yīng)用)
5. singleInstancePerTask :是singleTask的擴(kuò)展,這個(gè)Activity可以有多個(gè)實(shí)例,但是每個(gè)都是所在的Task的root?Activity。
五、小技巧
1. 查看在哪個(gè)Activity
創(chuàng)建?BaseActivity.kt 文件 --> 需要打印的文件中的類繼承 BaseActivity

2. 隨時(shí)隨地退出程序
添加ActivityCollector.kt文件來(lái)管理Activity


3. 啟動(dòng)Activity的最佳寫法
3.1 在需要打開的.kt文件中添加以下代碼,
companion object{
fun actionStart(context: Context,data1: String,data2: String){
val intent = Intent(context,MainActivity::class.java)
intent.putExtra("param1",data1)
intent.putExtra("param2",data2)
context.startActivity(intent)
}
}
3.2 使用?actionStart 方法打開 Activity
MainActivity.actionStart(this,"","")
