在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 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);
}
已有
0 人发表留言,猛击->>
这里<<-参与讨论
ITeye推荐