Android 关闭多个Activity的实现方法

总的来说有四种方法:

1、使用Application来进行关闭

public class App extends Application {   private static List lists = new ArrayList<>();   public static void addActivity(Activity activity) {     lists.add(activity);   }   public static void clearActivity() {     if (lists != null) {       for (Activity activity : lists) {         activity.finish();       }       lists.clear();     }   } } //然后写一个基类Activity,在构造构造方法调用App.addActivity(this);就可以实现。

2、使用广播的方式来进行关闭

在基类构造方法中实现注册广播,onDestroy方法取消注册

public class BaseActivity extends AppCompatActivity {   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     IntentFilter intentFilter = new IntentFilter();     intentFilter.addAction(getString(R.string.promotion_action));     registerReceiver(receiver, intentFilter);   }   BroadcastReceiver receiver = new BroadcastReceiver() {     @Override     public void onReceive(Context context, Intent intent) {       finish();     }   };   @Override   protected void onDestroy() {     super.onDestroy();     unregisterReceiver(receiver);   } } 

接下来只需要你在想要关闭所有Activity的界面调用

//销毁所有的Activity //关闭本窗口getActivity().finish();//关闭父窗口if(getActivity().getParent()!= null){  getActivity().getParent().finish();}//关闭列表页面Intent intent = new Intent();intent.setAction(getString(R.string.promotion_action));getActivity().sendBroadcast(intent);

3、使用onActivityResult递归回调的方式关闭

1)在基类Activity重写onActivityResult方法通过识别ResultCode来调用finish方法

2)接下来只需要在你想要关闭Activity调用setResult(Result_CLOSE)就可以了

public class BaseActivity extends AppCompatActivity {   protected final static int RESULT_CLOSE = 0;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);   }   @Override   protected void onActivityResult(int requestCode, int resultCode, Intent data) {     super.onActivityResult(requestCode, resultCode, data);     if(resultCode == RESULT_CLOSE){       setResult(RESULT_CLOSE);       finish();     }   } } 

4.使用setFalgs的方式来关闭

首先先来介绍一个LaunchMode四种模式:

LaunchMode

1)standard和singleTop是相同的,每次都会创建一个新的Activity实例,区别是singleTop当压入栈的Activity与任务栈的栈顶Activit相同则不会创建实例(会调用onNewIntent方法)

2)singleInstance和singleTask是相同的,都会保证任务中没有相同的任务,(当执行的Activity与任务中某个Activity相同则会调用onNewIntent方法),不同点是(singleInstance每次都会创建一个任务栈并将Activity压入栈中),(singleTask是在一个任务栈中,如果压入栈的Activity与栈内Activity某个相同则直接将那个Activity移动到栈顶不会创建新的实例)

当然这里并没有用到这四种模式而是运用的是Intent.FLAG_ACTIVITY_CLEAR_TOP,这种标示基本和singleTop类似不同的是如果压入栈的Activity在栈内某个Activity相同则将它上面的所有Activity进行出栈操作。

在每次跳转都加上

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

所以在最后一个Activity后退应用:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) {   if (keyCode == KeyEvent.KEYCODE_BACK) {     //销毁所有的Activity     Intent intent = new Intent(this,FirstActivity.class);     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);     startActivity(intent);   }   return super.onKeyDown(keyCode, event); } 

这样略先复杂,现在来说一下使用flag的另一种方法:

在退出的Activity的前一个Activity跳转加上

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); 

就可以了,现在来说一下这几个什么意思

/*   FLAG_ACTIVITY_CLEAR_TASK 这个标示将在这个活动开始之前清除该栈中所有的任务,将里面的Activity都finish掉   FLAG_ACTIVITY_TASK_ON_HOME 这个flag将造成新任务在home的上面,就是在启动的Activity点击back之后就会回到home界面  */  

如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多相关文章

  1. Android中button的onClick事件几种方法
  2. Android中几种延后处理事件的方法
  3. Android判断包名和类名是否存在的方法
  4. Android SDK 1.5 "--core-library" build error问题解决方法
  5. android http通信(二) 英译汉字典实例探究网络通信三种方法
  6. android sdk content loader 加载很慢的解决方法
  7. 分享45个android实例源码,很好很强大
  8. Android 得到连接热点的ip的方法
  9. Android GoogleMap的放大缩小地图控件的使用方法

随机推荐

  1. Android实现上下滑动效果
  2. android 横竖屏转换
  3. Android系列之浅谈Android(安卓)3D旋转
  4. Android(安卓)UI开发第二十八篇——Fragm
  5. 应用兼容性Android(安卓)Studio IDEA:基于
  6. 【Android(安卓)UI】Android(安卓)Layout
  7. Android(安卓)Studio主题设置
  8. android的Handler
  9. Android开机LOGO
  10. 为Android开发者定制的搜索引擎