`

Android利用activity启动模式退出整个应用

 
阅读更多
前面我们来先看一下目前网上提供的几种方案:
1.退出单个activity
1)、获取当前进程的id,杀死该进程。android.os.Process.killProcess(android.os.Process.myPid())
2)、终止当前正在运行的Java虚拟机方法。System.exit(0);

3)、finish();
4)、杀包方式。
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());
添加权限:<uses-permission android:name="android.permission.RESTART_PACKAGES" />;
(在2.2之前可以利用这个退出应用,很遗憾android2.2后失效了,连单个activity都结束不了)

2.退出整个应用(多个Activity)

以下我直接列出网上给出的几种方案,就不做详细说明了。
1)、制造抛异常导致程序强制退出:

2)、用个容器记录每个打开的Activity,在需要退出的时逐一关闭每个Activity

3)、广播方式:

4)、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

3.接下来看一下怎么利用activity启动模式退出整个应用,在这之前我简单的说下activity四种模式的概念,因为这个退出方法跟 activity的启动模式有一定的关系;

1)、standard 模式;也就是默认模式,每次激活Activity时都会创建一个Activity实例,并放入任务栈中。

2)、singleTop 模式;如果在任务栈中的栈定存在该Activity实例,下次激活该Activity实例时就不会创建新的 Activity的实例,直接重用它(在重用的这个过程中会调用实例的OnNewIntent()这个方法),否则就创建新的Activity实例。

3)、singleTask 模式;如果在栈中已经有该Activity的实例,以后就不会创建新的实例了,而会重用该实例(在重用的这个过程中会调用实例的OnNewIntent()这个方法)。重用时,如果该Activity实例不是在栈顶,它会让该实例回到栈顶,而它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

4)、singleInstance 模式;在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。

在android系统中,要想直接的关闭整个应用,这是不可能的,而在项目中当需要关闭整个应用时几乎都是采用间接的办法,以上列出的几种方案中其原理都是逐一关闭activity(制造抛异常导致程序强制退出除外),然后退出程序。接下来我们也利用这个原理来实现退出整个应用的目的,在activity启动模式singleTask 模式中,刚才提到如果该Activity实例存在但不是在栈顶,它会让该实例回到栈顶,而它上面的实例将会被移出栈。这样子,我们就可以将应用中的主入口Activity(这里假设主Activity为MainActivity)设置成singleTask模式,这样子我们就保证了这个Activity实例存在于栈底中,后面不管有多少其他Activity实例添加进来它始终会在栈底,这时我们只要在要关闭整个应用的那个Activity中把他转到这个Activity来(startActivity(xx.this,MainActivity.class));这样子其他的activity实例就会被移出栈,这时栈中只剩MainActivity实例,如果此时要是再能让这个MainActivity实例移除出栈,那么我们就达到了关闭整个应用的目的,不知道大家刚才有没有注意到OnNewIntent()这个方法,这个方法就是重用activity实例时会被调用,因此我们只要在MainActivity重写该方法并加上一句finish()来关闭当前activity实例我们的目的就达到了……

package com.test.launchmode;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public classMainActivity extends Activity {
@Override
protected final void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
startActivity(new Intent(this,xx.class));
}

@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
this.finish();
}
}

分享到:
评论

相关推荐

    Android使用Activity用作弹出式对话框

    最后,启动`PopupActivity`时,可以使用`Intent`并设置特殊的启动模式,这样`Activity`就会以对话框形式出现在当前`Activity`之上: ```java Intent intent = new Intent(this, PopupActivity.class); intent....

    Android代码-从注册流程分析如何安全退出多个Activity多种方式.rar

    6. **使用单一Activity架构**:另一种方法是采用单一Activity配合多个Fragment的设计模式,这样只需要结束单一的Activity即可退出应用,简化了退出逻辑。 在实际开发中,应根据具体需求选择合适的方法。同时,考虑...

    Android动画实例,不同Activity跳转

    通过理解Activity的启动模式、Intent Flag以及Android提供的动画系统,开发者可以创造出各种各样的Activity跳转动画,提升应用的用户体验。在实际开发中,可以根据需求选择适合的动画效果,并结合良好的设计原则,使...

    android启动模式

    在Android系统中,启动模式(Launch Mode)是应用程序组件(如Activity、Service等)的关键特性,它决定了组件如何被创建以及如何与系统交互。深入理解Android启动模式对于优化应用性能和用户界面体验至关重要。 ...

    安全退出activity方法(多种)

    3. 使用FLAG_ACTIVITY_NEW_TASK:如果你的Activity是在新的任务栈中启动的,可以使用`FLAG_ACTIVITY_NEW_TASK`和`FLAG_ACTIVITY_CLEAR_TASK`来清理整个任务栈,从而达到退出Activity的目的。这通常用于启动主...

    Android模拟Activity进出栈Demo.zip

    这个Demo将帮助开发者深入理解Android中Activity的管理方式,包括它们如何在任务栈中进出,以及如何利用生命周期方法、启动模式和Intent属性来控制Activity的行为。通过实践和分析这个Demo,开发者能够更好地构建...

    Android应用源码之9.Activity高级学习.zip

    2. **Intent与Activity启动模式**:Intent是Android中启动Activity的主要方式,可以携带数据。Activity的启动模式有四种:标准模式、单实例模式、单任务模式和单栈顶模式。源码中可能通过Intent启动不同的Activity,...

    android总结activity切换出现效果.zip

    8. **Activity栈管理**:理解Activity的启动模式(standard、singleTop、singleTask、singleInstance)对于控制Activity切换效果至关重要。不同的启动模式会影响Activity在栈中的位置,从而影响动画效果。 9. **...

    Activity加载模式讲解

    Android提供了四种基本的Activity启动模式: 1. **标准模式(Standard)**:这是默认模式,每次启动都会创建一个新的实例,无论它是否已经存在。新实例可以位于任务的任何位置,取决于启动它的Intent。 2. **单...

    Activity栈的简单应用.rar

    Activity是Android应用开发中的核心组件之一,它负责与用户交互并展示UI。在Android系统中,所有的Activity都被组织在一个称为任务(Task)的结构中,而任务内部则由一个Activity堆栈(BackStack)来管理。这个堆栈...

    android studio 几种基本Activity效果的实现

    Activity在Android系统中扮演着核心角色,它是应用程序的基本构建块,用于显示用户界面并处理用户交互。以下我们将讨论几种常见的Activity效果及其实现方法: 1. **启动动画(Launch Animation)**: 启动动画是...

    获取栈顶的activity

    5. **自定义方案**:例如,可以设计一个静态变量或单例模式来保存栈顶Activity的引用,每次启动新Activity时更新这个变量。 需要注意的是,获取栈顶Activity的方法应当谨慎使用,因为这可能涉及用户隐私和安全问题...

    如何完全退出程序

    要实现完全退出应用,一种常见方法是采用单例模式配合Activity管理。以下是一个具体的实践案例: 1. 创建一个名为`MyApplication`的自定义`Application`类,它将作为Activity管理对象。在这个类中,我们可以维护一...

    android 完全退出应用程序实现代码

    标题所提到的“android 完全退出应用程序实现代码”主要涉及如何在多Activity应用中优雅地结束所有活动并退出应用。通常,单纯调用`android.os.Process.killProcess(android.os.Process.myPid())`或`System.exit(0)`...

    退出Android程序时清除所有activity的实现方法

    - 提供`pushActivity()`方法,当新Activity启动时,将它添加到堆栈中。 - 提供`popActivity()`方法,用于关闭并移除栈顶Activity。 - 提供`currentActivity()`方法,获取当前栈顶的Activity。 - 提供`...

    安卓程序登录后一段时间不进行操作,自动退出程序

    Android应用中的Activity有多个状态,包括创建(Created)、启动(Started)、运行(Resumed)、暂停(Paused)、停止(Stopped)和销毁(Destroyed)。当用户离开应用或设备进入休眠模式时,Activity会从Resumed...

    Android应用源码之返回键退出程序的两种方式.zip

    利用`FLAG_ACTIVITY_CLEAR_TASK`和`FLAG_ACTIVITY_NEW_TASK`这两个启动模式标记,可以确保当Activity被启动时,清除所有栈中的其他Activity,达到退出程序的效果。 **2. 实现步骤** - 在你的主Activity的清单文件...

    Android退出应用最优雅的方式(改进版)1

    3. **使用`Intent.FLAG_ACTIVITY_CLEAR_TASK`和`Intent.FLAG_ACTIVITY_NEW_TASK`**:当启动新的`Activity`时,这些标志可以清除当前任务栈,使用户返回到主屏幕,从而达到退出应用的效果。 4. **处理后台服务和...

    Activity跳转页面切换漂亮效果(转)

    在Android应用开发中,Activity是...通过理解Activity的启动模式、创建动画资源、应用动画以及掌握Transition API和SharedElementTransition,开发者可以创造出丰富多样的页面切换效果,为用户提供更加愉悦的操作感受。

Global site tag (gtag.js) - Google Analytics