大家好,我是苏承栈。今天我们来聊聊Android开发中一个经常被提及但很少深入了解的属性——Intent.FLAG_ACTIVITY_NEW_TASK。
首先,什么是Intent.FLAG_ACTIVITY_NEW_TASK?它是一个静态标志属性,表示要启动的Activity应该在一个新的任务栈中。下面,我们就来一步步揭开它的神秘面纱。
什么是FLAG_ACTIVITY_NEW_TASK?
这是一个Intent类中的静态常量,具体如下:
public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;为什么要使用FLAG_ACTIVITY_NEW_TASK?
如果不使用这个标志,在某些特殊情况下会报错。具体来说,当你在Activity上下文之外启动Activity时,如果不加这个标志,就会抛出异常。
什么时候使用FLAG_ACTIVITY_NEW_TASK?
当调用startActivity启动一个Activity时,如果需要将Activity放在一个新的任务栈中,就应该使用这个标志。
如何使用FLAG_ACTIVITY_NEW_TASK?
使用起来很简单,只需要在Intent对象上设置这个标志即可:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);深入解析
接下来,我们来看看它的内部实现。首先,Context类中定义了startActivity方法,而ContextWrapper继承并覆盖了这个方法。这个mBase实际上指向的是ContextImpl类,我们再来看这个类中的startActivity方法。
@Override
public void startActivity(Intent intent, Bundle options) {
warnIfCallingFromSystemProcess();
if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {
throw new AndroidRuntimeException(
