当前位置:   article > 正文

【android开发-05】android中activity的启动模式介绍_安卓activity启动模式

安卓activity启动模式

1,活动的启动模式
在 Android 中,Activity 的启动模式主要有以下四种:

默认启动模式(Normal):这是默认的启动模式,基本上就是标准的启动模式。当一个 Activity 启动后,它将会被压入堆栈。如果用户再次启动这个 Activity,那么之前的实例会被暂停并压入堆栈顶,然后新的实例开始运行。

栈顶启动模式(SingleTop):在这种模式下,如果新的 Activity 在堆栈顶已经存在,则不会创建新的 Activity,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。

栈内启动模式(SingleTask):在这种模式下,如果新的 Activity 不在堆栈顶,系统会创建新的 Activity 并压入堆栈;如果新的 Activity 已经在堆栈中存在,那么系统不会创建新的实例,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。

单例启动模式(SingleInstance):这是一种特殊的栈内启动模式。在这种模式下,Activity 只能在一个任务的实例中存在,它始终位于堆栈的顶部。即使系统任务切换,它也不会被替换。当一个 SingleInstance Activity 被启动时,系统会创建一个新的任务栈并把 Activity 压入栈顶。

以上就是 Android 中 Activity 的四种启动模式。需要注意的是,这些启动模式并不能防止 Activity 被系统杀死,它们只是在需要创建新的 Activity 或者在已经存在的 Activity 上启动新的 Intent 时,决定了系统如何处理这些 Activity。

可以在AndroidManifest.xml中通过标签指定android:luanchMode属性来选择启动模式。

2,不同模式的启动原理

以下是一个 Android 中不同启动模式运行的例子。

假设有两个 Activity,分别是 FirstActivity 和 SecondActivity。

默认启动模式(Normal):
如果 FirstActivity 启动了 SecondActivity,那么 FirstActivity 会被暂停并压入堆栈,SecondActivity 会开始运行。如果再次启动 SecondActivity,会创建一个新的 SecondActivity 实例并压入堆栈,之前的 SecondActivity 实例会被暂停。
在这里插入图片描述

栈顶启动模式(SingleTop):
如果 SecondActivity 已经在堆栈顶,那么当再次启动 SecondActivity 时,系统不会创建新的 SecondActivity 实例,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。如果 SecondActivity 不在堆栈顶,系统会创建一个新的 SecondActivity 实例并压入堆栈顶。
在这里插入图片描述

栈内启动模式(SingleTask):
如果 SecondActivity 不在堆栈中,系统会创建一个新的 SecondActivity 实例并压入堆栈。如果 SecondActivity 已经在堆栈中存在,那么系统不会创建新的实例,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。在这个模式下,即使系统任务切换,SecondActivity 也不会被替换。
在这里插入图片描述

单例启动模式(SingleInstance):
在这个模式下,SecondActivity 只能在一个任务的实例中存在,它始终位于堆栈的顶部。当 FirstActivity 启动 SecondActivity 时,系统会创建一个新的任务栈并把 SecondActivity 压入栈顶。即使系统任务切换,SecondActivity 也不会被替换。当再次启动 SecondActivity 时,系统不会创建新的实例,而是通过调用已经存在的实例的 onNewIntent() 方法来通知它。
在这里插入图片描述

3,activity启动模式运行代码参考例子
以下是一个简单的 Android 代码示例,演示了不同启动模式下的 Activity 运行情况:

public class MainActivity extends AppCompatActivity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        // 启动默认启动模式的 SecondActivity  
        startActivity(new Intent(this, SecondActivity.class));  
    }  
}  
  
public class SecondActivity extends AppCompatActivity {  
  
    private static final String TAG = "SecondActivity";  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_second);  
  
        // 打印当前 Activity 的启动模式  
        Log.d(TAG, "Activity launch mode: " + getIntent().getFlags());  
  
        // 启动栈顶启动模式的 ThirdActivity  
        startActivity(new Intent(this, ThirdActivity.class));  
    }  
}  
  
public class ThirdActivity extends AppCompatActivity {  
  
    private static final String TAG = "ThirdActivity";  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_third);  
  
        // 打印当前 Activity 的启动模式和堆栈信息  
        Log.d(TAG, "Activity launch mode: " + getIntent().getFlags());  
        Log.d(TAG, "Task stack: " + getTaskStack());  
    }  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

在这个例子中,MainActivity 启动了 SecondActivity,SecondActivity 又启动了 ThirdActivity。每个 Activity 中都打印了当前 Activity 的启动模式和堆栈信息。根据打印结果,我们可以观察到不同启动模式下 Activity 的运行情况和堆栈变化。

你的鼓励将是我创作的最大动力
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码诗人/article/detail/60725
推荐阅读
相关标签
  

闽ICP备14008679号