之前介绍了两个退出多个Activity的方法了。链接在下面:
方法一:setFlags()方法
方法二:setResult()方法
接下来介绍第三种方法——自定义的一个类去管理打开的Activity。废话不多说直接上代码,如下:
public class MyApplication extends Application {
private static Context myApplication;
public static ArrayList<Activity> activities;
@Override
public void onCreate() {
super.onCreate();
myApplication = getApplicationContext();
}
/**
* 添加Activity
*/
public static void addActivity(Activity activity) {
if (activities == null) {
activities = new ArrayList<Activity>();
}
activities.add(activity);
}
/**
* 删除集合中指定的Activity
*/
public static void removeActivity(Activity activity) {
activities.remove(activity);
}
/**
* 关闭所有的Activity,并清空集合
*/
public static void finishAllActivity() {
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
activities.clear();
}
public static Context getContext() {
return myApplication;
}
}
自定义一个MyApplication类,其中实现的方法是:addActivity、removeActivity和finishAllActivity。
还是和之前一样有五个Activity,分别是BaseActivity、A、B、C和D,其中BaseActivity作为基类Activity,让其余四个Activity继承于它。BaseActivity和其余四个Activity代码如下:
/**
*BaseActivity实现代码
*/
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());//打印出相应的Activity名称
MyApplication.addActivity(this);//将Activity添加到集合中
}
}
/**
*A实现代码,其余类似
*/
public class A extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a_layout);
Button btnA = (Button) findViewById(R.id.btn_a);
btnA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(A.this, B.class));
}
});
}
}
最后,在想要完全退出的地方,使用如下代码:
MyApplication.finishAllActivity();
方法步骤总结:
- 自定义一个类,用于管理打开的Activity,在类中定义一个集合用于存储打开的Activity,接下来实现添加Activity(list.add(Activity activity))、删除集合中指定的Activity(list.remove(Activity activity))和关闭所有Activity并清空集合(遍历整个集合,使用finish()关闭Activity,list.clear()清空集合)。
- 定义一个基类Activity,其他Activity继承于它。基类Activity中使用
自定义类名.addActivity(this);实现添加Activity到集合中。 - 退出时使用:自定义类名.finishAllActivity();实现退出多个Activity。