当前位置:   article > 正文

Android —— Activity的四种启动模式_栈顶复用模式

栈顶复用模式

除了Activity的生命周期外,Activity的启动模式也是一个难点,有时候为了满足项目的特殊需求,就必须使用Activity的启动模式。

在默认情况下,当我们多次启动同一个Activity的时候,系统会创建多个实例并把它们放入任务栈中,但是有些场景重复创建多个实例,是没有必要且浪费资源的,这就需要启动模式来修改系统的默认行为。

下面,我将以理论+实践的形式为大家介绍Activity的启动模式。

standard标准模式

这是系统的默认启动模式,采用这种模式的Activity无论是否已经存在实例,都会重新创建一个实例,在这种模式下谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。

实践:MainActivity 采用 standard 模式

// 核心代码展示
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   
    final static String TAG = "MainActivityLog";
    Button button;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, getTaskId() + "onCreate: " + getIntent().getIntExtra("id",0));
        button = findViewById(R.id.button);
        button.setOnClickListener(this);
    }
    
	@Override
    protected void onStart() {
   
        super.onStart();
        Log.i(TAG, getTaskId() +"onStart: " + getIntent().getIntExtra("id",0));
    }
    
    //此处省略重复代码
   	
    @Override
    public void onClick(View view) {
   
        switch (view.getId()){
   
            case R.id.button:
                Intent intent = new Intent(this,MainActivity.class);
                intent.putExtra("id",1);
                startActivity(intent);
        }
    }
}
  • 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
// 日志结果展示
// 启动MainActivity
2022-04-21 18:37:59.622 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onCreate: 0
2022-04-21 18:37:59.625 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onStart: 0
2022-04-21 18:37:59.626 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onResume: 0
// 点击MainActivity的按钮启动MainActivity
2022-04-21 18:38:03.336 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onPause: 0
2022-04-21 18:38:03.373 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onCreate: 1
2022-04-21 18:38:03.378 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onStart: 1
2022-04-21 18:38:03.379 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onResume: 1
2022-04-21 18:38:03.939 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onStop: 0
2022-04-21 18:38:03.942 4072-4072/com.hnucm.myapplication I/MainActivityLog: 12onSaveInstanceState: 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

singleTop栈顶复用模式

在这种模式下,如果新的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的NewIntent方法将会被回调。如果新Activity的实例已存在但不是位于栈顶,那么新Activity依然会被创建。

实践:MainActivity 采用 singleTop 模式

// 核心代码展示
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   
    final static String TAG = "MainActivityLog";
    Button button;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, getTaskId() + "onCreate: " + getIntent().getIntExtra("id",0));
        button = findViewById(R.id.button);
        button.setOnClickListener(this);
    }
    
	@Override
    protected void onStart() {
   
        super.onStart();
        Log.i(TAG, getTaskId() +"onStart: " + getIntent().getIntExtra("id",0));
    }
    
    //此处省略重复代码
   	
    @Override
    public void onClick(View view) {
   
        switch (view.getId()){
   
            case R.id.button:
                Intent intent = new Intent(this,MainActivity.class);
                intent.putExtra("id",</
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/思考机器4/article/detail/60715
推荐阅读
相关标签
  

闽ICP备14008679号