在Android系统中,默认情况下,每开启一个Activity,都在会当前的任务栈中压入一个新的Activity,当我们在一个Application中开发了多个Activity的时候,如果想要退出应用,那么我们需要按多此返回键才能退出...这样就造成用户体验很不好的情况..

那么,怎样做才能让用户在想退出Application的时候,只按一个返回键就能退出呢??

其实有很多的解决方法,今天这里介绍一种相对安全,而且用户体验就比较好的方法,供自己以后查阅


首先,我们都知道,在Android应用中,全局只有一个Application,尽管我们平时很少使用它...但是,我们每次打开manifest文件的时候,在Activity标签外层,都被一个Application包裹住,这个其实就是我们的Application,全局只有一个,并且这个Application在Android中是作为程序的入口,相当于在Java中的main函数....

那么,问题来了...有这个Application,有什么用途呢?....


前面说到,这个Application在整个应用程序中是唯一的,全局只有一个,Application中有一个onCreate方法,这个方法会在当前应用所有对象被创建之前就会执行....


1.在Application中持有一个全局的集合(List),进而在其onCreate()方法中,实例化该集合对象
2.在Activity的onCreate方法中,通过getApplication()获取到当前应用的Application对象,通过对象,就可以在获取到里面的全局的集合,就可以将当前的Activity加入到集合中去,每一个Activity的onCreate方法中,都执行相同的操作
3.通过上述的操作,我们就可以收集到所有已经被打开的Activity

4.在每一个Activity的onBackPressed()方法中,获取该全局的集合(List) ,遍历集合,获取每一个Activity,并且调用其finish()方法即可


下面上代码

Application.java

public class MyApplication extends Application {

    public List<Activity> myApps;

    @Override
    public void onCreate() {

        myApps = new ArrayList<>();
        super.onCreate();
    }
}




FirstActivity.java


protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);


        MyApplication myApplication = (MyApplication) getApplication();
        myApplication.myApps.add(this);

    }




..... 有多少个Activity就执行多少此add方法



最后,在每一个Activity的onBackPressed()方法中,调用下面的方法



同时在Activity的onDestroy()方法中,从集合中移除当前的Activity



@Override
    public void onBackPressed() {
        super.onBackPressed();
        MyApplication myApplication = (MyApplication) getApplication();
        for (Activity acticity : myApplication.myApps) {

            acticity.finish();
        }
    }




@Override
    protected void onDestroy() {
        super.onDestroy();
        MyApplication myApplication = (MyApplication) getApplication();
        myApplication.myApps.remove(this);

    }