1. 程式人生 > 其它 >體驗activity的生命週期

體驗activity的生命週期

技術標籤:第一行程式碼(第三版)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介面下退出程式,列印資訊如下,
    在這裡插入圖片描述