體驗activity的生命週期
阿新 • • 發佈:2021-02-04
技術標籤:第一行程式碼(第三版)android
- 新建ActivityLifeCycleTest專案,除了預設的MainActivity再建立兩個子activity,NormalActivity和DialogActivity
- 將兩個子activity的layout檔案新增textview如下,
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="this is a normal activity"/> </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="this is a dialog activity"/> </LinearLayout>
- 修改AndroidManifest.xml檔案,給DialogActivity新增對話方塊式主題,如下,
<activity android:name=".DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog"></activity>
- 修改MainActivity佈局程式碼,新增兩個按鈕分別啟動兩個activity,如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/startNormalActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="start normal activity"/> <Button android:id="@+id/startDialogActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="start dialog activity"/> </LinearLayout>
- 修改MainActivity中的程式碼如下,
package com.maovazquez.activitylifecycletest
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*
import kotlin.math.log
class MainActivity : AppCompatActivity() {
private val tag = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(tag,"oncreate")
setContentView(R.layout.activity_main)
startNormalActivity.setOnClickListener {
val intent = Intent(this, NormalActivity::class.java)
startActivity(intent)
}
startDialogActivity.setOnClickListener {
val intent = Intent(this, DialogActivity::class.java)
startActivity(intent)
}
}
override fun onStart() {
super.onStart()
Log.d(tag, "onStart")
}
override fun onResume() {
super.onResume()
Log.d(tag, "onResume")
}
override fun onPause() {
super.onPause()
Log.d(tag, "onPause")
}
override fun onStop() {
super.onStop()
Log.d(tag, "onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.d(tag, "onDestroy")
}
override fun onRestart() {
super.onRestart()
Log.d(tag, "onRestart")
}
}
- 執行程式,可以看到MainActivity第一次建立時一次執行onCreate、onStart和onResume
- 點選startNormalActivity按鈕,此時MainActivity被完全遮擋,因此onPause和onStop都會得到執行,按下back鍵返回MainActivity,列印資訊如下,
- 點選startDialogActivity,此時MainActivity沒有完全被遮擋,只是進入暫停狀態,沒有進入停止狀態
- 最後在MainActivity介面下退出程式,列印資訊如下,