美文网首页
Android —— Activity的Flags

Android —— Activity的Flags

作者: 想要进大厂的螺丝钉 | 来源:发表于2022-04-25 20:38 被阅读0次

Activity的Flags有很多,本文主要介绍一些比较常用的标记位。

标记为的作用有很多,有的标记位可以指定Activity的启动模式,比如 FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_SINGLE_TOP 等;还有的标记位可以影响Activity的运行状态,比如 FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 等。

下面,我将为大家介绍Activity常用的Flags。

FLAG_ACTIVITY_NEW_TASK

这个标记位的作用是为不同应用的Activity重新创建一个任务栈,并在新的任务栈中启动这个Activity,相同应用的Activity则直接创建在同一个任务栈中。

FLAG_ACTIVITY_SINGLE_TOP

这个标记位的作用是为Activity指定singleTop启动模式,其效果和在XML中指定该启动模式相同。

实践:MainActivity 在xml文件中设置的启动模式为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.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); //设置标记位
                intent.putExtra("id",1);
                startActivity(intent);
        }
    }
}
// 日志结果展示
// 启动MainActivity
2022-04-23 14:49:22.280 7312-7312/com.hnucm.myapplication I/MainActivityLog: 32onCreate: 0
2022-04-23 14:49:22.283 7312-7312/com.hnucm.myapplication I/MainActivityLog: 32onStart: 0
2022-04-23 14:49:22.285 7312-7312/com.hnucm.myapplication I/MainActivityLog: 32onResume: 0
// 点击MainActivity的按钮启动MainActivity
2022-04-23 14:49:30.959 7312-7312/com.hnucm.myapplication I/MainActivityLog: 32onPause: 0
2022-04-23 14:49:30.960 7312-7312/com.hnucm.myapplication I/MainActivityLog: 32onNewIntent: 0
2022-04-23 14:49:30.962 7312-7312/com.hnucm.myapplication I/MainActivityLog: 32onResume: 0

根据日志可以发现,XML设置的启动模式和Intent设置的启动模式产生冲突时,会生效Intent通过Flag设置的启动模式。

FLAG_ACTIVITY_CLEAR_TOP

具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈,一般需要配合 FLAG_ACTIVITY_NEW_TASK 一起使用。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

具有这个标记的Activity不会出现在历史Activity的列表中,当某些情况下,我们不希望用户通过历史列表回到我们的Activity的时候,这个标记就可以实现。

以上就是Activity的Flags的介绍。

欢迎留言指出错误。

相关文章

网友评论

      本文标题:Android —— Activity的Flags

      本文链接:https://www.haomeiwen.com/subject/gmdqyrtx.html