Activity的Flags有很多,本文主要介绍一些比较常用的标记位。
标记为的作用有很多,有的标记位可以指定Activity的启动模式,比如 FLAG_ACTIVITY_NEW_TASK
和 FLAG_ACTIVITY_SINGLE_TOP
等;还有的标记位可以影响Activity的运行状态,比如 FLAG_ACTIVITY_CLEAR_TOP
和 FLAG_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的介绍。
欢迎留言指出错误。
网友评论