当前位置:   article > 正文

android activity启动模式_今日分享:Activity的四种启动模式

activity的四种启动模式是______、______、______和______。

目录

  • 介绍
  • 一、standard模式
  • 二、singleTop模式
  • 三、 singleTask模式
  • 四、singleInstance模式

介绍

Activity的启动模式一共有四种,分别为standard、singleTop、 singleTask、 singleInstance,可以在AndroidManifest.xml中通过给标签指定 android:launchMode属性来选择启动模式。

一、standard模式

standard模式是Activity的默认启动模式,当我们没有指定特定的模式启动Activity时,Activity将会以standard模式启动。使用standard启动Activity每次启动都会创建一个Activity实例

  1. /*在MainActivity中启动MainActivity
  2. 每次点击button_1就会创建一个MainActivity实例
  3. 因此需要多点击一次button_2来关闭Activity
  4. */
  5. class MainActivity : AppCompatActivity() {
  6. override fun onCreate(savedInstanceState: Bundle?) {
  7. super.onCreate(savedInstanceState)
  8. //打印日志查看是否创建新得MainActivity实例
  9. Log.d("MainActivity",this.toString())
  10. setContentView(R.layout.activity_main)
  11. button_1.setOnClickListener {
  12. val intent = Intent(this,MainActivity::class.java)
  13. startActivity(intent)
  14. }
  15. button_2.setOnClickListener {
  16. finish() //销毁当前Activity
  17. }
  18. }
  19. }

单击三次创建了三个心得MainActivity实例

83cd7c6048f7ee5ea65a68f11d71ef1b.png

二、singleTop模式

当目前MainActivity已经在栈顶时则不会创建新的MainActivity实例,但是当MainActivity不再栈顶时则会继续创建一个新的MainActivity实例修改AndroidManifest.xml中的MainActivity的启动模式

  1. </activity>
  2. <activity android:name=".MainActivity"
  3. android:launchMode="singleTop">
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>

当MainActivity在栈顶时,运行程序

  1. class MainActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. //打印日志查看是否创建新得MainActivity实例
  5. Log.d("MainActivity",this.toString())
  6. setContentView(R.layout.activity_main)
  7. button_1.setOnClickListener {
  8. val intent = Intent(this,MainActivity::class.java)
  9. startActivity(intent)
  10. }
  11. button_2.setOnClickListener {
  12. finish() //销毁当前Activity
  13. }
  14. }
  15. }

无论点击多少次button_1都不会创建心得MainActivity实例

afab6e3211ec743c4bf28b3941de22cc.png

当MainActivity不在栈顶时,运行程序
点击button_2从MainActivity跳转到Main2Activity,使Main2Activity在栈顶

  1. class MainActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. //打印日志
  5. Log.d("data",this.toString())
  6. setContentView(R.layout.activity_main)
  7. //启动Main2Activity
  8. button_2.setOnClickListener {
  9. val intent = Intent(this,Main2Activity::class.java)
  10. startActivity(intent)
  11. }
  12. }
  13. }

点击button_3从Main2Activity跳转到MainActivity

  1. class Main2Activity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. Log.d("data",this.toString())
  5. setContentView(R.layout.activity_main2)
  6. button_3.setOnClickListener {
  7. val intent = Intent(this,Main2Activity::class.java)
  8. startActivity(intent)
  9. }
  10. }
  11. }

查看打印日志可以看到从Main2Activity跳转到MainActivity时创建了一个新的MainActivity实例

722e6ad0f9bc4d693ad185247ccb1369.png

三、 singleTask模式

singleTask模式则是standard模式和singleTop模式的升级版,解决了重复创建栈顶Activity的问题。当启动模式设置成 singleTask模式时,每次启动Activity,系统会先在返回栈中检查是否已经有这个实例,如果有则直接使用该实例,并且把该Activity之上的所有Activity出栈,如果没有则会创建新的实例。

四、singleInstance模式

指定singleInstance模式的Activity会启用一个新的返回栈来管理这个Activity
创建三个Activity,分别为MainActivity、Main2Activity、Main3Activity修改AndroidManifest.xml中的Main2Activity的启动模式

  1. <activity android:name=".Main2Activity"
  2. android:launchMode="singleInstance"/>
  3. <activity

修改MainActivity中的代码taskId实际是调用父类getTaskId()方法

  1. class MainActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. //打印返回栈ID
  5. Log.d("data","MainActivity Task:$taskId")
  6. setContentView(R.layout.activity_main)
  7. //启动Main2Activity
  8. button_2.setOnClickListener {
  9. val intent = Intent(this,Main2Activity::class.java)
  10. startActivity(intent)
  11. }
  12. }
  13. }

修改Main2Activity中的代码

  1. class Main2Activity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. //打印返回栈ID
  5. Log.d("data"," Main2Activity Task:$taskId")
  6. setContentView(R.layout.activity_main)
  7. //启动Main2Activity
  8. button_3.setOnClickListener {
  9. val intent = Intent(this,Main3Activity::class.java)
  10. startActivity(intent)
  11. }
  12. }
  13. }

修改Main3Activity中的代码

  1. class Main3Activity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. Log.d("data","Main3Activity Task:$taskId")
  5. setContentView(R.layout.activity_main3)
  6. }
  7. }

打印日志查看返回栈ID

04ca602c9d132c2804c9e0c41779c6d7.png


可以看到模式设置成singleInstance模式的 Main2Activity的返回栈ID与模式为默认模式为standard模式的MainActivity、Main3Activity的返回栈ID不同。

文章来源如侵删——

Activity的四种启动模式_Ternence_T的博客-CSDN博客​blog.csdn.net
3a7cf78058f0669e8fa6c07ccc2561c6.png
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号