如何安全的退出一个已开启多个Activity的Android Application

标签: 安全 activity android | 发表时间:2015-12-10 13:39 | 作者:297542579
出处:http://www.iteye.com
在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);

    }


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [安全 activity android] 推荐:

如何安全的退出一个已开启多个Activity的Android Application

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

Android Activity与Service通信

- - CSDN博客移动开发推荐文章
一、当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现.      当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用. 比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信.

Android 实现Activity后台运行

- - CSDN博客移动开发推荐文章
此方法其实不是主要是屏蔽Keycode_Back,让它不结束(finish())Activity,直接显示HOME界面.                                 ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).

Android 之 Activity的加载模式

- - 移动开发 - ITeye博客
         加载模式决定以哪种方式启动一个跳转到原来某个Activity实例;.         在Android 开发中,activity 之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity;. 3)  加载模式的种类:.

Android 之 Activity和Intent用法介绍

- - 移动开发 - ITeye博客
                            Activity 生命周期. 1、 Activity介绍.         Activity 是Android应用程序和用户交互的窗口;.     2)  运行时的Activity特点:.         i.  可见的;. 2、 Activity的生命周期.

android不同Activity之间的数据共享

- - CSDN博客移动开发推荐文章
通过不同Activity之间的消息传递机制实现数据共享. 将需要共享的变量声明为public static类型. 新建Application的子类,在该类中声明共享的变量. 在AndroidManifest.xml的application加个name属性就可以了,如下面所示:. 作者:foreverkoking 发表于2013-2-21 17:04:41 原文链接.

Android Service与Activity之间通信的几种方式

- - CSDN博客移动开发推荐文章
转载请注明地址 http://blog.csdn.net/xiaanming/article/details/9750689. 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,Intent中我们可以传递数据给Service,而当我们Service执行某些操作之后想要更新UI线程,我们应该怎么做呢.

Android下的Activity的四种启动模式

- - CSDN博客推荐文章
一:Standard的启动模式.  Standard是默认的模式每开始一个activity,就会在栈中加一个activity,相同的也会加,. 所以加多少个,就要按多少次返回键才能回到最初的界面. 二:singleTop的启动模式.     Singletop:如果任务栈的栈顶已经存在这个activity的实例,.

关于Android创建Activity需要注意的地方

- - CSDN博客推荐文章
1.在onCreate()中加载UI,在onStart()/onResume()中刷新UI. 2.在onCreate()中用Handler延时请求数据,数据处理最好是二次callback回调(第一次来自DB,第二次来自网络). 3.在Activity中尽量少创建Handler,创建一个UIHandler,一个后台HandlerThread足以.

Android上在两个Activity之间传递Bitmap对象

- - CSDN博客推荐文章
Android上在两个Activity之间传递Bitmap对象. 1.  HTTP客户端下载图片,通过ImageView对象显示. 2.  把ImageView上的Bitmap对象从当前Activity传递到另外一个. 3.  基于串行化传递Java对象数据. 首先看我是怎么实现HTTP客户端下载图片,通过异步Task接口实现HTTP客户端下载图片并通过Handler来更新ImageView,代码如下:.