杀死全部的Activity,退出当前程序

本文介绍了三种方法来完全退出Android程序,包括使用Dalvik VM的本地方法杀死进程、通过ActivityCollector管理并销毁Activity,以及利用Activity生命周期和Intent.FLAG_ACTIVITY_CLEAR_TOP清除栈内所有Activity。
摘要由CSDN通过智能技术生成

杀死全部的Activity,退出当前程序

首先说明finish()杀死的只是当前的Activity,并不是全部的Activity

 

方法一:Dalvik VM的本地方法

 1、android.os.Process.killProcess(android.os.Process.myPid())       获取PID,目前获取自己的也只有该API,否则从/proc中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就乱套了。
 2、System.exit(0)       常规java、c#的标准退出法,返回值为0代表正常退出

方法二:

(1)创建一个ActivityCollector.java,此类用作收集和销毁activity的公共类

复制代码
复制代码
public class ActivityCollector {

    public static List<Activity> activities = new ArrayList<Activity>();

    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    public static void finishAll() {
        for (Activity activity : activities) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
}
复制代码
复制代码

 

(2).创建一个BaseActivity.java基类,项目中的所有activity都继承此类,调用上面类的方法就可以。

复制代码
复制代码
public class BaseActivity extends Activity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState);  
        ActivityCollector.addActivity(this);  
    }  
  
    @Override  
    protected void onDestroy() {  
        // TODO Auto-generated method stub  
        super.onDestroy();  
        ActivityCollector.removeActivity(this);  
    }
复制代码
复制代码

 

(3)让A, B, C这三个activity分别去继承BaseActivity.java

(4)只需要调用ActivityCollector.java中的finishAll()方法,就可以结束全部Activity了。

方法三、根据Activity的声明周期

Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现

这里我们在A窗口打开B窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP

这样开启B时将会清除该进程空间的所有Activity。

    //在A窗口中使用下面的代码调用B窗口
    Intent intent = new Intent();
    intent.setClass(MainActivity.this, otherActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置
    startActivity(intent);
    //在B窗口中调用finish()就全部结束掉了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值