网站三级页怎么做/江北seo综合优化外包
目录
- 介绍
- 一、standard模式
- 二、singleTop模式
- 三、 singleTask模式
- 四、singleInstance模式
介绍
Activity的启动模式一共有四种,分别为standard、singleTop、 singleTask、 singleInstance,可以在AndroidManifest.xml中通过给标签指定 android:launchMode属性来选择启动模式。
一、standard模式
standard模式是Activity的默认启动模式,当我们没有指定特定的模式启动Activity时,Activity将会以standard模式启动。使用standard启动Activity每次启动都会创建一个Activity实例
/*在MainActivity中启动MainActivity
每次点击button_1就会创建一个MainActivity实例
因此需要多点击一次button_2来关闭Activity
*/
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//打印日志查看是否创建新得MainActivity实例Log.d("MainActivity",this.toString())setContentView(R.layout.activity_main)button_1.setOnClickListener {val intent = Intent(this,MainActivity::class.java)startActivity(intent)}button_2.setOnClickListener { finish() //销毁当前Activity}}
}单击三次创建了三个心得MainActivity实例

二、singleTop模式
当目前MainActivity已经在栈顶时则不会创建新的MainActivity实例,但是当MainActivity不再栈顶时则会继续创建一个新的MainActivity实例修改AndroidManifest.xml中的MainActivity的启动模式
</activity><activity android:name=".MainActivity"android:launchMode="singleTop"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>当MainActivity在栈顶时,运行程序
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//打印日志查看是否创建新得MainActivity实例Log.d("MainActivity",this.toString())setContentView(R.layout.activity_main)button_1.setOnClickListener {val intent = Intent(this,MainActivity::class.java)startActivity(intent)}button_2.setOnClickListener { finish() //销毁当前Activity}}
}无论点击多少次button_1都不会创建心得MainActivity实例

当MainActivity不在栈顶时,运行程序
点击button_2从MainActivity跳转到Main2Activity,使Main2Activity在栈顶
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//打印日志Log.d("data",this.toString()) setContentView(R.layout.activity_main)//启动Main2Activitybutton_2.setOnClickListener {val intent = Intent(this,Main2Activity::class.java)startActivity(intent)}}
}点击button_3从Main2Activity跳转到MainActivity
class Main2Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("data",this.toString())setContentView(R.layout.activity_main2)button_3.setOnClickListener {val intent = Intent(this,Main2Activity::class.java)startActivity(intent)}}
}查看打印日志可以看到从Main2Activity跳转到MainActivity时创建了一个新的MainActivity实例

三、 singleTask模式
singleTask模式则是standard模式和singleTop模式的升级版,解决了重复创建栈顶Activity的问题。当启动模式设置成 singleTask模式时,每次启动Activity,系统会先在返回栈中检查是否已经有这个实例,如果有则直接使用该实例,并且把该Activity之上的所有Activity出栈,如果没有则会创建新的实例。
四、singleInstance模式
指定singleInstance模式的Activity会启用一个新的返回栈来管理这个Activity
创建三个Activity,分别为MainActivity、Main2Activity、Main3Activity修改AndroidManifest.xml中的Main2Activity的启动模式
<activity android:name=".Main2Activity" android:launchMode="singleInstance"/><activity修改MainActivity中的代码taskId实际是调用父类getTaskId()方法
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//打印返回栈IDLog.d("data","MainActivity Task:$taskId")setContentView(R.layout.activity_main)//启动Main2Activitybutton_2.setOnClickListener {val intent = Intent(this,Main2Activity::class.java)startActivity(intent)}}
}修改Main2Activity中的代码
class Main2Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//打印返回栈IDLog.d("data"," Main2Activity Task:$taskId")setContentView(R.layout.activity_main)//启动Main2Activitybutton_3.setOnClickListener {val intent = Intent(this,Main3Activity::class.java)startActivity(intent)}}
}修改Main3Activity中的代码
class Main3Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("data","Main3Activity Task:$taskId")setContentView(R.layout.activity_main3)}
}打印日志查看返回栈ID

可以看到模式设置成singleInstance模式的 Main2Activity的返回栈ID与模式为默认模式为standard模式的MainActivity、Main3Activity的返回栈ID不同。
文章来源如侵删——
Activity的四种启动模式_Ternence_T的博客-CSDN博客blog.csdn.net
