前三个退出多个Activity的方法链接:
这次介绍的方法跟方法三有点类似,也是自定义一个类作为活动管理器,只不过实现的功能更多。自定义类的代码如下:
public class ActivityCollector {
public static Stack<Activity> activities;
public static ActivityCollector instance;
private ActivityCollector() {
}
/**
* 单一实例
* @return 返回此对象
*/
public static ActivityCollector getInstance() {
if (instance == null) {
instance = new ActivityCollector();
}
return instance;
}
/**
* 添加activity到栈中
* @param activity
*/
public static void addActivity(Activity activity) {
if (activities == null) {
activities = new Stack<Activity>();
}
activities.add(activity);
}
/**
* 删除指定的activity
* @param activity
*/
public static void removeActivity(Activity activity) {
if (activity != null) {
activities.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 删除栈顶的activity
*/
public static void finishCurrentActivity() {
removeActivity(activities.lastElement());
}
/**
* 结束所有activity
*/
public static void finishAllActivity() {
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
activities.clear();
}
/**
* 删除指定类名的activity
* @param cls
*/
public static void finishActivity(Class<?> cls) {
for (Activity activity : activities) {
if (activity.getClass().equals(cls)) {
removeActivity(activity);
}
}
}
}
和之前一样需要一个基类Activity,其余Activity继承于它。基类Activity中的代码实现如下:
public class BaseActivity extends AppCompatActivity {
private static final String TAG = "BaseActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, getClass().getSimpleName());
ActivityCollector.addActivity(this);//注1
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);//注2
}
}
- 注1:将创建的Activity添加到活动管理器中
- 注2:将关闭的Activity移除活动管理器
接着当你想完全退出或者关闭指定类名的Activity时,那么就调用自定义类中实现的方法即可,如关闭所有Activity:
ActivityCollector.finishAllActivity();
方法步骤总结
- 自定义活动管理器,在活动管理器中实现关闭指定类名Activity、栈顶Activity和关闭所有Activity等。
- 创建一个基类Activity,在基类Activity中实现添加Activity到活动管理器中和将关闭的Activity移除活动管理器。
- 想要对Activity进行什么样的操作时,调用活动管理器中的方法。