Android A启动到D再回到A的解决方案

问题描述

启动Activity 顺序为A -> B -> C -> D,忽然想从D回退到C(例如场景为A为登陆,BCD都为注册信息),这样我们应该怎么解决

解决方案

  1. B到D都监听onActivityResult ,一层层结束过来。这是一个很笨的方法,但是管用,就是麻烦了点。
  2. 使用EventBus这种方法,B到C都监听结束事件,算是一种1的改良型,不过这里有个致命的问题,EventBus是通过静态变量来存储事件的,应用回收之后再恢复到D,前面的B到C都是还没有注册过事件的,这样的情况下就会出现Bug
  3. 在A中使用SingleTop 属性和在Intent中使用ClearTop属性 ,当启动A的时候会自动清空A之上的Activity,但是也有个问题,使用这个属性的Activity不能使用startActivityForResult 。
  4. 解决办法3 的改良型,我们不在Androidmainfest.xml 中指定SingleTop 属性,我们可以在Intent指定这次的启动为SingleTop 和 ClearTop 这样就不会有不能使用startActivityForResutl 的问题了。

    ###方法4具体代码如下
    java
    Intent intent = new Intent(this,MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    intent.putExtra("type","refresh");//你可以自定传递的内容,在onNewIntent 函数可以看到
    startActivity(intent);