Activity->Activity生命周期和启动模式

<四大组件 android:name="xxx"
         android:exported="true" // 该组边能够被其他组件启动
         android:enabled="true" // 该组件能工与用户交互
</四大组件>

Activity常用生命周期

  • 启动Activity
2024-05-29 03:53:57.401 21372-21372 yang                    I  onCreate
2024-05-29 03:53:57.403 21372-21372 yang                    I  onStart
2024-05-29 03:53:57.405 21372-21372 yang                    I  onResume
  • Activity切到后台,锁屏
2024-05-29 03:55:14.174 21372-21372 yang                    I  onPause
2024-05-29 03:55:14.647 21372-21372 yang                    I  onStop
2024-05-29 03:55:14.648 21372-21372 yang                    I  onSaveInstanceState
  • Activity返回前台
2024-05-29 03:55:42.337 21372-21372 yang                    I  onRestart
2024-05-29 03:55:42.340 21372-21372 yang                    I  onStart
2024-05-29 03:55:42.340 21372-21372 yang                    I  onResume
  • Activity旋转方向两次回来
  • AndroidManifest.xml文件中没有配置android:configChanges="screenSize|orientation"
2024-05-29 04:13:49.562 16759-16759 yang                    I  onCreate
2024-05-29 04:13:49.565 16759-16759 yang                    I  onStart
2024-05-29 04:13:49.567 16759-16759 yang                    I  onResume
2024-05-29 04:14:00.009 16759-16759 yang                    I  onPause
2024-05-29 04:14:00.014 16759-16759 yang                    I  onStop
2024-05-29 04:14:00.015 16759-16759 yang                    I  onSaveInstanceState
2024-05-29 04:14:00.015 16759-16759 yang                    I  onDestroy
2024-05-29 04:14:00.077 16759-16759 yang                    I  onCreate
2024-05-29 04:14:00.089 16759-16759 yang                    I  onStart
2024-05-29 04:14:00.090 16759-16759 yang                    I  onRestoreInstanceState
2024-05-29 04:14:00.090 16759-16759 yang                    I  onResume
  • AndroidManifest.xml文件中配置android:configChanges="screenSize|orientation"
2024-05-29 04:15:54.484 17090-17090 yang                    I  onCreate
2024-05-29 04:15:54.486 17090-17090 yang                    I  onStart
2024-05-29 04:15:54.488 17090-17090 yang                    I  onResume
2024-05-29 04:16:05.746 17090-17090 yang                    I  onConfigurationChanged
2024-05-29 04:16:12.112 17090-17090 yang                    I  onConfigurationChanged

Activity启动模式

standard标准模式

  • 每次启动Activity时,系统都会在当前Activity栈创建一个新的Activity实例,无论该Activity是否已经存在
const val TAG = "Yang"
class MainActivity : AppCompatActivity() {
    var mImageView : MyImageView ?= null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mImageView = findViewById(R.id.real_iv)
        mImageView?.setOnClickListener {
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }
        Log.i("yang", "$this onCreate")
    }

    override fun onStart() {
        super.onStart()
        Log.i("yang", "$this onStart")
    }

    override fun onResume() {
        super.onResume()
        Log.i("yang", "$this onResume")
    }

    override fun onPause() {
        super.onPause()
        Log.i("yang", "$this onPause")
    }

    override fun onStop() {
        super.onStop()
        Log.i("yang", "$this onStop")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.i("yang", "$this onDestroy")
    }

    override fun onRestart() {
        super.onRestart()
        Log.i("yang", "$this onRestart")
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        Log.i("yang", "$this onSaveInstanceState")
    }

    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        Log.i("yang", "$this onRestoreInstanceState")
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        Log.i("yang", "$this onConfigurationChanged")
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        Log.i("yang", "$this onNewIntent")
    }
}

// log result
2024-05-29 05:01:46.737 26443-26443 yang                    I  com.yang.app.MainActivity@54d9d4e onCreate
2024-05-29 05:01:46.739 26443-26443 yang                    I  com.yang.app.MainActivity@54d9d4e onStart
2024-05-29 05:01:46.742 26443-26443 yang                    I  com.yang.app.MainActivity@54d9d4e onResume
2024-05-29 05:01:49.573 26443-26443 yang                    I  com.yang.app.MainActivity@54d9d4e onPause
2024-05-29 05:01:49.609 26443-26443 yang                    I  com.yang.app.MainActivity@4c77c18 onCreate
2024-05-29 05:01:49.621 26443-26443 yang                    I  com.yang.app.MainActivity@4c77c18 onStart
2024-05-29 05:01:49.622 26443-26443 yang                    I  com.yang.app.MainActivity@4c77c18 onResume
2024-05-29 05:01:49.983 26443-26443 yang                    I  com.yang.app.MainActivity@54d9d4e onStop
2024-05-29 05:01:49.984 26443-26443 yang                    I  com.yang.app.MainActivity@54d9d4e onSaveInstanceState

singleTop单顶模式

  • 如果Activity位于Activity栈的栈顶,会复用这个实例,并回调onNewIntent()方法。没有处于栈顶,还会继续创建新的实例
2024-05-29 06:58:47.124  2160-2160  yang                    I  com.yang.app.MainActivity@54d9d4e onCreate
2024-05-29 06:58:47.126  2160-2160  yang                    I  com.yang.app.MainActivity@54d9d4e onStart
2024-05-29 06:58:47.128  2160-2160  yang                    I  com.yang.app.MainActivity@54d9d4e onResume
2024-05-29 06:58:49.444  2160-2160  yang                    I  com.yang.app.MainActivity@54d9d4e onPause
2024-05-29 06:58:49.444  2160-2160  yang                    I  com.yang.app.MainActivity@54d9d4e onNewIntent
2024-05-29 06:58:49.445  2160-2160  yang                    I  com.yang.app.MainActivity@54d9d4e onResume

singleTask单任务模式

  • 当前Activity栈只会存在这一个Activity实例,如果Activity位于Activity栈的栈顶,会复用这个实例,并回调onNewIntent()方。如果没有处于Activity栈的栈顶,会清除要启动的Activity上面的所有Activity
2024-05-29 07:54:20.568  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onCreate
2024-05-29 07:54:20.576  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onStart
2024-05-29 07:54:20.579  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onResume
2024-05-29 07:54:23.027  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onPause
2024-05-29 07:54:23.054  7933-7933  yang                    I  com.yang.SecondActivity@7657d8c onCreate
2024-05-29 07:54:23.065  7933-7933  yang                    I  com.yang.SecondActivity@7657d8c onStart
2024-05-29 07:54:23.066  7933-7933  yang                    I  com.yang.SecondActivity@7657d8c onResume
2024-05-29 07:54:23.421  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onStop
2024-05-29 07:54:23.422  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onSaveInstanceState
2024-05-29 07:54:25.331  7933-7933  yang                    I  com.yang.SecondActivity@7657d8c onPause
2024-05-29 07:54:25.335  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onRestart
2024-05-29 07:54:25.338  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onStart
2024-05-29 07:54:25.338  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onNewIntent
2024-05-29 07:54:25.338  7933-7933  yang                    I  com.yang.app.MainActivity@4db5049 onResume
2024-05-29 07:54:25.683  7933-7933  yang                    I  com.yang.SecondActivity@7657d8c onStop
2024-05-29 07:54:25.684  7933-7933  yang                    I  com.yang.SecondActivity@7657d8c onDestroy

singleInstance单实例模式

  • 所有Activity栈只能存在这一个Activity实例,意味着这个Activity栈不会有其他Activity的实例。如果singleInstance启动模式启动的Activity再去启动的另外的Activity,会再创建一个新的Activity栈,另外的Activity存在这个新创建的栈中。从Recent最近打开任务可以看到两个应用窗口
  • 查看当前任务栈启动Activity数量
val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val numActivities = activityManager.appTasks[0].taskInfo.numActivities
Log.i("yang", "当前{$this}栈启动Activity数量 = $numActivities")

// log result
2024-05-29 08:14:09.137 11888-11888 yang                    I  当前{com.yang.app.MainActivity@8ae877c}栈启动Activity数量 = 1
2024-05-29 08:14:09.137 11888-11888 yang                    I  com.yang.app.MainActivity@8ae877c onCreate
2024-05-29 08:14:09.147 11888-11888 yang                    I  com.yang.app.MainActivity@8ae877c onStart
2024-05-29 08:14:09.149 11888-11888 yang                    I  com.yang.app.MainActivity@8ae877c onResume
2024-05-29 08:14:11.872 11888-11888 yang                    I  com.yang.app.MainActivity@8ae877c onPause
2024-05-29 08:14:11.902 11888-11888 yang                    I  当前{com.yang.SecondActivity@754bbdb}栈启动Activity数量 = 1
2024-05-29 08:14:11.903 11888-11888 yang                    I  com.yang.SecondActivity@754bbdb onCreate
2024-05-29 08:14:11.915 11888-11888 yang                    I  com.yang.SecondActivity@754bbdb onStart
2024-05-29 08:14:11.916 11888-11888 yang                    I  com.yang.SecondActivity@754bbdb onResume
2024-05-29 08:14:12.286 11888-11888 yang                    I  com.yang.app.MainActivity@8ae877c onStop
2024-05-29 08:14:12.286 11888-11888 yang                    I  com.yang.app.MainActivity@8ae877c onSaveInstanceState
  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值