【Android】退出多个Activity方法(四)

来源:互联网 发布:儿童英语网络课程好吗 编辑:程序博客网 时间:2024/06/12 22:14

    前三个退出多个Activity的方法链接:

  • 方法一:setFlags()
  • 方法二:setResult()
  • 方法三:自定义一个类管理打开的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();

方法步骤总结

  1. 自定义活动管理器,在活动管理器中实现关闭指定类名Activity、栈顶Activity和关闭所有Activity等。
  2. 创建一个基类Activity,在基类Activity中实现添加Activity到活动管理器中和将关闭的Activity移除活动管理器。
  3. 想要对Activity进行什么样的操作时,调用活动管理器中的方法。
0 0