(转)Android开发之关闭多个Activity

原地址:http://blog.csdn.net/weiwozhiyi/article/details/50791416


在Android中如果关闭一个Activity调用finish即可,但是在我们的应用都有多个Activity,如何动态的关闭所有的Activity显得非常的重要,本文介绍四种方法:1、使用Application来关闭。2、使用广播的方式来关闭。3、使用onActivityResult递归回调的方式关闭。4.使用setFlags的方式来关闭

1、使用Application来进行关闭

[java]  view plain  copy
  1. public class App extends Application {  
  2.   
  3.     private static List<Activity> lists = new ArrayList<>();  
  4.   
  5.     public static void addActivity(Activity activity) {  
  6.         lists.add(activity);  
  7.     }  
  8.   
  9.     public static void clearActivity() {  
  10.         if (lists != null) {  
  11.             for (Activity activity : lists) {  
  12.                 activity.finish();  
  13.             }  
  14.   
  15.             lists.clear();  
  16.         }  
  17.     }  
  18. }  
写一个基类Activity,在构造构造方法调用App.addActivity(this);就可以实现。

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

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

[java]  view plain  copy
  1. public class BaseActivity extends AppCompatActivity {  
  2.   
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.   
  7.         IntentFilter intentFilter = new IntentFilter();  
  8.         intentFilter.addAction("com.andly.bro");  
  9.         registerReceiver(receiver, intentFilter);  
  10.     }  
  11.   
  12.     BroadcastReceiver receiver = new BroadcastReceiver() {  
  13.         @Override  
  14.         public void onReceive(Context context, Intent intent) {  
  15.             finish();  
  16.         }  
  17.     };  
  18.   
  19.     @Override  
  20.     protected void onDestroy() {  
  21.         super.onDestroy();  
  22.         unregisterReceiver(receiver);  
  23.     }  
  24. }  
接下来只需要你在想要关闭所有Activity的界面调用

[java]  view plain  copy
  1. //销毁所有的Activity  
  2.             Intent intent = new Intent();  
  3.             intent.setAction("com.andly.bro");  
  4.             sendBroadcast(intent);  
3、使用onActivityResult递归回调的方式关闭

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

[java]  view plain  copy
  1. public class BaseActivity extends AppCompatActivity {  
  2.     protected final static int RESULT_CLOSE = 0;  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.     }  
  7.   
  8.     @Override  
  9.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  10.         super.onActivityResult(requestCode, resultCode, data);  
  11.         if(resultCode == RESULT_CLOSE){  
  12.             setResult(RESULT_CLOSE);  
  13.             finish();  
  14.         }  
  15.     }  
  16. }  
接下来只需要在你想要关闭Activity调用setResult(Result_CLOSE)就可以了

4.使用setFalgs的方式来关闭

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

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

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


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

在每次跳转都加上

[java]  view plain  copy
  1. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  

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

[java]  view plain  copy
  1. @Override  
  2. public boolean onKeyDown(int keyCode, KeyEvent event) {  
  3.     if (keyCode == KeyEvent.KEYCODE_BACK) {  
  4.         //销毁所有的Activity  
  5.         Intent intent = new Intent(this,FirstActivity.class);  
  6.         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  7.         startActivity(intent);  
  8.     }  
  9.     return super.onKeyDown(keyCode, event);  
  10. }  
这样略先复杂,现在来说一下使用flag的另一种方法:

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

[java]  view plain  copy
  1. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);  
就可以了,现在来说一下这几个什么意思

[java]  view plain  copy
  1. /* 
  2.     FLAG_ACTIVITY_CLEAR_TASK 这个标示将在这个活动开始之前清除该栈中所有的任务,将里面的Activity都finish掉 
  3.     FLAG_ACTIVITY_TASK_ON_HOME 这个flag将造成新任务在home的上面,就是在启动的Activity点击back之后就会回到home界面 
  4.  */  
附上效果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值