如何安全退出已调用多个Activity的Application?

来源:互联网 发布:域名转出申请表 编辑:程序博客网 时间:2024/04/30 00:40

在开发自己的android程序时,经常会遇到一个问题,就是在启动多个Activity的情况下,如果要退出应用回到桌面,可能要按多次后退键,这是由Android系统默认的启动模式所决定的,在默认情况下,Android系统会为每一个新打开的Activity创建一个实例。这将带来很不好的用户体验,在面试的时候我们也经常会被问到这个问题,那么该如何解决呢?本文给大家推荐一种非常好用的方法,也是使用最多的。

这种方法的原理就是把每一个新建的Activity都加入到列表中,然后在重写Activity的onBackPressed()方法,在该方法中将列表中的数据移除。下面通过一个实例进行解释:

在MainActivity中我只添加了一个按钮,通过该按钮可以启动SecondActivity,在SecondActivity中同样添加了一个按钮,通过该按钮可以启动MainActivity。布局代码比较简单,就不贴出了。我自定义了一个MyApplication,继承自Application,在该类中,定义了一个列表,类型为Activity,同时定义了一个exit()方法,用来退出Activity,代码如下:

public class MyApplication extends Application {    public List<Activity> list = new ArrayList<>();    public void exit(){        for(Activity a:list){            a.finish();        }        list.clear();    }}
注意,自定义的Application必须要在ManiFest文件中进行声明后方可使用:

<application    android:name=".MyApplication"    ....>
MainActivity.java代码如下:

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        MyApplication application = (MyApplication) getApplication();        application.list.add(this);        findViewById(R.id.main).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                startActivity(new Intent(MainActivity.this,SecondActivity.class));            }        });    }    @Override    public void onBackPressed() {        MyApplication application = (MyApplication) getApplication();        application.exit();        super.onBackPressed();    }}
SecondActivity中的代码与此类似:

public class SecondActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        MyApplication application = (MyApplication) getApplication();        application.list.add(this);        findViewById(R.id.second).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                startActivity(new Intent(SecondActivity.this,MainActivity.class));            }        });    }    @Override    public void onBackPressed() {        MyApplication application = (MyApplication) getApplication();        application.exit();        super.onBackPressed();    }}

然后运行程序,无论打开多少个新的Activity,只要使用后退键即可直接退出程序。

有些应用使用点击两次返回键退出程序,这个只要监听两次返回键,计算出两次之间的差值即可,可以定义一个差值常量,若小于该常量,将Activity退出,否则不做任何处理。大家可以自己试一下,在这就不列出了。





0 0
原创粉丝点击