[置顶] [Android开发]启动模式问题纪录

今天有个学长提了个问题:现在有三个activity 启动模式都是标准的. Aactivity有个按钮启动了一个透明的Bactivity,B有个按钮启动了C,这个时候按返回键。想要做到回到A.如果操作 除了在B启动C的时候finish掉自己,也除了 在B的onActivityResult中进行返回判断,还有其他的什么办法?

我想了想,好像在看《Android群英传》的时候我看到了Intent设置FLAG 时有一种模式是Activity自动销毁的。于是我便翻开了群英传。
群英传是这样介绍的:
FLAG_ACTIVITY_NO_HISTORY
使用这种模式启动Activity,当该Activity启动其他Activity后,该Activity就消失了,不会保留在Activity栈中,例如A-B,B中以这种模式启动C,C再启动D,则当前栈为ABD。

于是我这么和学长说:

可以将Intent Flag启动模式设为FLAG_ACTIVITY_NO_HISTORY,用这种模式用A启动B,B再启动C,当前栈中就剩AC了。

然后学长问我,
网上有人说是离开B后直接finish,也有人说是在c调用finish后 b调用了finish,这种方式B的finish调用是否在C返回后调用?
这种事情当然是实验一下,打一下log就好:

为了验证,我写了个demo。
MainActivity:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent(MainActivity.this, Bactivity.class);

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        startActivity(intent);
    }
}

Bactivity.java

public class Bactivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.b);
        startActivity(new Intent(Bactivity.this, Cactivity.class));
    }
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.d("----------->", "tttttttttt");
    }
}

Cactivity.java

public class Cactivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("hhhhhhhhhhh", "hhhhhhh");
        setContentView(R.layout.c);

    }
}

这样就验证了是后者,也就是在c调用finish后 b调用了finish,以上。

你可能感兴趣的:(android)