这里采用任务栈管理器的方式,即利用一个单例模式的Activity栈来管理所有Activity。
实现步骤
1. 自定义 Application类,储存每一个Activity,并实现关闭所有Activity的操作;
import android.app.Activity;
import android.app.Application;
import java.util.LinkedList;
import java.util.List;
public class ActivityCollector extends Application {
private List<Activity> activityList = new LinkedList<Activity>();
private static ActivityCollector instance;
/**
*单例模式1
*/
private ActivityCollector() {
}
public static ActivityCollector getInstance() {
if(null == instance) {
instance = new ActivityCollector();
}
return instance;
}
@Override
public void onCreate() {
super.onCreate();
}
/**
*单例模式 2:
*/
// public static ActivityCollector getInstance() {
// return instance;
// }
// @Override
// public void onCreate() {
// super.onCreate();
// instance = this;
// }
//添加Activity到容器中
public void addActivity(Activity activity) {
activityList.add(activity);
}
//遍历所有Activity并finish
public void exit() {
for(Activity activity:activityList) {
activity.finish();
}
activityList.clear();
}
}
2. 将activity添加到栈中;
(1)若你未定义BaseActivity去实现AppCompatActivity类(即你定义的Activity都是直接继承AppCompatActivity类的),则可以只在程序运行时启动的第一个Activity的onCreate方法中将当前的Activity添加到栈中(这里App的入口Activity是LoginActivity);
public class LoginActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//将LoginActivity添加到activity栈,方便后面退出程序
ActivityCollector.getInstance().addActivity(this);
}
}
(2)若你定义了BaseActivity实现了AppCompatActivity类(即你定义的Activity都是直接继承BaseActivity类的),则可以在父类BaseActivity中添加继承子类Activity到栈中;
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 添加Activity到堆栈
ActivityCollector.getInstance().addActivity(this);
}
...
}
3. 在需要结束所有Activity的时候调用 exit 方法
ActivityCollector.getInstance().exit();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 ^_^
参考文献
参考: Android退出应用程序方法总结 - 简书(其中的 “任务栈式” 方式已测试,成功)