如何退出所有的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);
}
}