android 关闭所有的Activity

如何退出所有的activity,这个问题估计android初学者都会遇到,当然我也不例外,在朋友的提示下,终于解决了这个问题。对于这个问题的解决方案有两种:一种是发送广播,每个activity接收到广播后,便调用自己的finish()方法;还有一种是让所有的Activity继承一个BaseActivity,在BaseActivity里初始化一个栈,在onResume时把新的Activity加入这个栈,在退出的时候从栈中依次取出每一个Activity然后分别调用finish()并且赋值为null,这样就行了。


第一种:发送广播,代码如下所示:


1.编写一个BaseActivity,所有的activity继承这个BaseActivity。

2.要整体退出时,调用this.closeAllActivity()方法。


BaseActivity代码:


package com.xaut.activity;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class BaseActivity extends Activity {

    public static final String ACTION_CLOSS_ACTIVITY = "com.xaut.activity.BaseActivity.finish";  
    
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver(){  
 
        @Override  
        public void onReceive(Context context, Intent intent) {  
            // 结束窗口  
            BaseActivity.this.finish();  
        }  
    };  
 
    @Override  
    //--activity真正在前台运行中  
    protected void onResume() {  
        super.onResume();  
        // 在当前的activity中注册广播   
        IntentFilter filter = new IntentFilter();  
        filter.addAction(ACTION_CLOSS_ACTIVITY);  
        this.registerReceiver(broadcastReceiver, filter);  
    }  
      
 
    //Activity has leaked IntentReceiver  that was originally registered here.   
    //Are you missing a call to unregisterReceiver()?  
    //注册了广播接收器后要在销毁时取消注册,否则会出错。  
    @Override  
    protected void onDestroy() {  
        this.unregisterReceiver(broadcastReceiver);  
        super.onDestroy();  
    }  
 
    public void closeAllActivity() {  
        // 发送广播,关闭所有activity  
        Intent intent = new Intent();  
        intent.setAction(ACTION_CLOSS_ACTIVITY);  
        sendBroadcast(intent);//--发送当前的意图  
    }  
        
}

第二种:构建activity栈,代码如下所示:

1.编写一个BaseActivity,所有的activity继承这个BaseActivity。

2.要整体退出时,调用exit();方法。


package com.xaut.activity;
import java.util.LinkedList;
import android.app.Activity;
import android.os.Bundle;

public class BaseActivity extends Activity {

     public static LinkedList<Activity> sAllActivitys = new LinkedList<Activity>();  
     
        @Override  
        protected void onCreate(Bundle bundle) {  
            super.onCreate(bundle);  
            sAllActivitys.add(this);  
        }  
          
        @Override  
        public void onDestroy() {  
            super.onDestroy();  
            sAllActivitys.remove(this);  
        }  
      
          
        public static void finishAll() {  
            for(Activity activity : sAllActivitys) {  
                activity.finish();  
            }  
              
            sAllActivitys.clear();  
        }  
      
        public static void exit() {  
            finishAll();  
            // 这个主要是用来关闭进程的, 关把所有activity finish  
            // 的话,进程是不会关闭的  
            System.exit(0);  
        }  
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值