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

来源:互联网 发布:2016年餐饮业数据分析 编辑:程序博客网 时间:2024/05/16 09:14

杀死全部的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()就全部结束掉了
0 0
原创粉丝点击