如何安全退出已调用多个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
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- ARRAYLIST VECTOR LINKEDLIST 区别与用法
- 有关网页抓取的内容
- unity C#模板
- Hadoop伪分布集群安装
- HDU5595
- 如何安全退出已调用多个Activity的Application?
- SQL * Loader详解
- linux Cent OS6.5 安装nodeJS(分分钟搞定)
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别
- 5个不同的数比较7次解析
- AndroidHttp通信 HTTP Client与HttpURLConnection的区别
- 服务器接受客户端图片
- 基于PCA简单的人脸识别opencv实现-图像处理学习笔记
- mac+virtualbox+ubuntu 共享文件夹