Давайте сделаем это немного проще. Предположим, у вас есть класс Constants.java
, в который вы помещаете все свои повторно используемые константы приложения. В нем описывается стек активности, подобный следующему:
public static ArrayList<WeakReference<Activity>> activity_stack=new ArrayList<WeakReference<Activity>>();
/**
* Add the activity as weak reference to activity stack.
* @param act
*/
public static void addToActivityStack(Activity act)
{
WeakReference<Activity> ref = new WeakReference<Activity>(act);
activity_stack.add(ref);
}
И всякий раз, когдасоздайте какое-нибудь действие, в onCreate в последней строке вы поместите что-то вроде этого:
Constants.addToActivityStack(this);
Теперь определите метод, подобный следующему в Constants.java
/**
* Kill all the activities on activity stack except act.
* To kill all the passed parameter should be null.
*/
public static void killAllExcept(Activity act)
{
for(WeakReference<Activity> ref:Global.activity_stack)
{
if(ref != null && ref.get() != null)
{
if(act != null && ref.get().equals(act))
{
continue;//dont finish this up.
}
ref.get().finish();
}
}
activity_stack.clear();//but clear all the activity references
}
Теперь, когда вам нужночтобы завершить все свои действия, просто позвоните Constants.killAllExcept(null)
или Constants.killAllExcept(this)
, если хотите сохранить это действие.
Этот метод удобен, когда вы хотите сохранить одно действие, а другие / если хотите, можетедобей их всех.