一、标准模式(Standard)
标准模式是Android的默认模式,即每次启动Activity都会创建一个新的实例加入到栈顶。当用户按下返回键时,当前Activity会被销毁并出栈,此时前一个Activity重新位于栈顶,重新获得焦点。
但是标准模式存在一个缺点,即当一个Activity启动另一个Activity时,后者也会被创建加入到栈顶,此时栈中会有多个Activity实例,导致资源浪费和用户体验下降。
// 在标准模式下启动一个Activity Intent intent = new Intent(this, TargetActivity.class); startActivity(intent);
二、栈顶复用模式(SingleTop)
栈顶复用模式是指当一个Activity已经位于栈顶时,再次启动它时不再创建新的实例,直接复用已有的实例,并调用onNewIntent()方法。
这种模式可以避免创建多个相同的Activity实例,提高应用性能和用户体验。但是如果一个Activity不在栈顶时,仍然会创建新的实例加入到栈顶。
// 在栈顶复用模式下启动一个Activity Intent intent = new Intent(this, TargetActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent);
三、栈内复用模式(SingleTask)
栈内复用模式是指当一个Activity已经存在于栈中时,再次启动它时并不会在栈中创建新的实例。系统会调用该Activity实例的onNewIntent()方法,同时把它上面的Activity全部销毁后,使其位于栈顶。
这种模式适用于一些需要保持单例的Activity,例如应用首页。当用户从其他应用或者系统桌面返回时,会优先找到已有的Activity实例进行复用,而不是重新创建一个新的实例。
// 在栈内复用模式下启动一个Activity Intent intent = new Intent(this, TargetActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
四、单例模式(SingleInstance)
单例模式是指一个Activity在整个系统中只有一个实例,无论是从本应用启动还是从其他应用启动。当一个Activity被设置为单例模式时,系统会为它单独创建一个新的栈来管理。多个应用共享同一个栈中的Activity实例。这种模式适用于一些需要全局单例的特殊场景,例如闹钟、电话等系统级应用。
但是需要注意的是,由于单例Activity会在新的栈中运行,因此无法与其他Activity进行共享数据。
// 在单例模式下启动一个Activity Intent intent = new Intent(this, TargetActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_INSTANCE); startActivity(intent);