`
yutinglong
  • 浏览: 66519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义Activity堆栈,不同版本中程序的退出

阅读更多

1、首先创建一个名为ScreenManager的类。

2、编写其代码,如下所列。

package wyf.ytl.utils;

import java.util.Stack;
import android.app.Activity;

public class ScreenManager {
 private static Stack<Activity> activityStack;
 private static ScreenManager instance;
 private  ScreenManager(){}
 public static ScreenManager getScreenManager(){
  if(instance == null){
   instance = new ScreenManager();
  }
  return instance;
 }
 public void popActivity(){
  Activity activity=activityStack.lastElement();
  if(activity!=null){
   activity.finish();
   activity=null;
  }
 }
 public void popActivity(Activity activity){
  if(activity!=null){
   activity.finish();
   activityStack.remove(activity);
   activity=null;
  }
 }
 public Activity currentActivity(){
  if(activityStack.size() == 0){
   return null;
  }
  Activity activity = activityStack.lastElement();
  return activity;
 }
 public void pushActivity(Activity activity){
  if(activityStack==null){
   activityStack=new Stack<Activity>();
  }
  activityStack.add(activity);
 }
 public void popAllActivityExceptOne(Class cls){
  while(true){
   Activity activity = currentActivity();
   if(activity==null){
    break;
   }
   if(activity.getClass().equals(cls) ){
    break;
   }
   popActivity(activity);
  }
 }
 public void exitApp(){
  while(true){
   Activity activity = currentActivity();
   if(activity==null){
    break;
   }
   popActivity(activity);
  }
 }
}
 }
 public void popAllActivityExceptOne(Class cls){
  while(true){
   Activity activity = currentActivity();
   if(activity==null){
    break;
   }
   if(activity.getClass().equals(cls) ){
    break;
   }
   popActivity(activity);
  }
 }
 public void exitApp(){
  while(true){
   Activity activity = currentActivity();
   if(activity==null){
    break;
   }
   popActivity(activity);
  }
 }
}

3、在每个Activity中的onCreate方法中调用自定义Activity栈中的pust方法,如下所示。

ScreenManager.getScreenManager().pushActivity(this);

4、重写所有Activity中的onKeyDown方法,拦截系统原有的返回键的处理,代码如下所示。

 /**
  * 拦截返回按键的方法
  */
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  switch (keyCode) {
  case KeyEvent.KEYCODE_BACK:// 返回键
   Utils.showExitDialog(this);
   break;
  }
  return false;
 }

5、之后在需要退出应用程序时调用自定义Activity栈的退出方法即可。

ScreenManager.getScreenManager().exitApp();

分享到:
评论

相关推荐

    Android 程序安全退出

    在这种情况下,可以通过广播或自定义事件来通知所有Activity退出,或者在主Activity中设置一个全局标志,当所有Activity都检测到这个标志时退出。 4. **后台服务管理**:如果应用程序运行了后台服务,退出时需要...

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

    同时,通过自定义的ActivityManager,可以方便地控制和跟踪应用程序中的Activity堆栈,提高代码的可维护性和一致性。 总结来说,退出Android程序时清除所有Activity的关键在于创建一个Activity管理器,利用堆栈数据...

    Android 退出程序

    Android中的Activity管理主要涉及到Activity的生命周期、栈管理和如何实现程序退出。接下来我们将深入探讨这些知识点。 1. **Activity生命周期**:每个Activity都有一个清晰的生命周期,包括创建(onCreate())、...

    Android动画实例,不同Activity跳转

    不同的启动模式会影响Activity如何创建和在任务堆栈中的行为,从而影响动画效果的实现。 二、Intent与Intent Flag 在Activity间进行跳转时,我们需要使用Intent对象。Intent用于传递数据和启动组件(如Activity)。...

    获取栈顶的activity

    Android的Activity是以任务(Task)为单位组织的,每个任务是一个Activity堆栈,新启动的Activity会被压入堆栈顶部,用户操作会从堆栈顶部的Activity开始。当用户按回退键或通过其他方式退出时,栈顶的Activity会被...

    返回键退出程序的两种方式.zip

    但是,如果在多层Activity堆栈中,可能需要考虑如何正确管理Activity的生命周期。 方法二:利用FLAG_ACTIVITY_CLEAR_TOP和Intent.FLAG_ACTIVITY_SINGLE_TOP 另一种方式是通过启动模式和Intent标志来实现。例如,当...

    Activity栈的简单应用.rar

    在Android系统中,所有的Activity都被组织在一个称为任务(Task)的结构中,而任务内部则由一个Activity堆栈(BackStack)来管理。这个堆栈遵循“后进先出”(LIFO)的原则,也就是最后启动的Activity会位于栈顶,...

    UncaughtException不让Android应用异常退出

    这样,即使该组件在一个进程中遇到未捕获异常导致崩溃,也不会影响到其他运行在不同进程中的组件,从而防止整个应用的退出。 3. **Process.killProcess()**: 这是一个系统级别的方法,用于结束指定的进程。在处理...

    Android退出应用测试

    在Android开发中,退出应用程序是一个看似简单但其实包含多个层面的技术点。本测试工程主要针对Android应用的退出机制进行探讨,适用于使用Android Studio (AS) 开发环境,而对于使用Eclipse的开发者,可能需要进行...

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

    在Android应用开发中,Activity是应用程序的基本组件,用于展示用户界面和处理用户交互。当我们进行Activity之间的跳转时,为了提升用户体验,往往希望添加一些漂亮的页面切换效果。本篇文章将探讨如何实现Activity...

    Android高级应用源码-模拟Activity进出栈.zip

    7. **Activity间的过渡动画**:为了提升用户体验,开发者可以自定义Activity切换时的动画效果,通过`overridePendingTransition()`方法实现。 8. **后台任务与Activity**:当Activity被暂停或停止时,可能会进行...

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

    源码中可能通过Intent启动不同的Activity,并展示不同启动模式下Activity的实例数量和堆栈行为。 3. **回退栈管理**:回退栈是Android系统维护Activity实例的一种机制,允许用户通过返回键回退到之前的Activity。...

    activity切换特效.zip

    理解这些标志如何影响Activity堆栈可以帮助优化动画。 7. **动画资源**: 动画资源通常放在`res/anim`目录下,包括`xml`格式的动画文件。常见的动画类型有帧动画(`animator`)和补间动画(`animation`)。 8. **...

    各种Activity切换效果

    不同的启动模式会影响到Activity的生命周期和堆栈管理,从而影响到切换效果。 接下来,我们关注Activity切换动画。在Android中,可以通过定义自定义动画来实现Activity间的过渡效果。这主要涉及两个XML文件,分别...

    Android实现退出时关闭所有Activity的方法

    这在处理多层级的Activity堆栈时尤其有用,确保了资源的有效管理。但需要注意的是,应谨慎使用`System.exit(0)`,因为它是一种非常规的退出方式,可能会引起其他问题。在实际开发中,应遵循最佳实践,合理管理...

    Switching_activity_AIDE(beporsam.ir)_between_android_

    在Android应用开发中,Activity是构成应用程序的基本单元,它代表用户界面的一个屏幕。"Switching_activity_AIDE(beporsam.ir)_between_android_"这个标题暗示了我们正在讨论如何在不同的Activity之间进行切换,这是...

    [Android开发从零开始].9.Activity高级学习

    它们决定了新Activity如何被创建和堆栈管理,例如,单任务模式会清除所有栈中处于它之上的Activity,而单实例模式则在整个应用中只创建一个Activity实例。 4. **Activity的回退栈**:Activity的回退栈是系统管理...

    Android框架学习记录1

    AMS中的重量级进程处理不仅涉及到Activity的启动,还包含了Activity在不同窗口模式(WindowMode)间的切换,比如从普通模式转换到免费形式(Freeform)模式。退出Freeform模式时,系统需要重新调整Activity的大小和...

    Android开发指南中文版

    11. **清理堆栈**:当用户按下后退键或通过其他方式退出任务时,系统会按照堆栈的顺序销毁Activity,称为“清理堆栈”。 12. **启动任务**:通过Intent的FLAG_ACTIVITY_NEW_TASK标志,可以在新的任务栈中启动...

    超有用的安卓学习材料9

    当用户从一个Activity导航到另一个Activity时,系统会在后台维护一个Activity堆栈。要从最后一个Activity(例如D)退出整个程序,可以使用`Intent.FLAG_ACTIVITY_CLEAR_TOP`标志。当你从D启动A时,这个标志会清除...

Global site tag (gtag.js) - Google Analytics