首先,我们将管理Activity的功能通过一个扩展的Application类来实现。
public class MyApplication extends Application { private static Stack<Activity> activityStack; private static MyApplication singleton; @Override public void onCreate() { super.onCreate(); singleton=this; } // Returns the application instance public static MyApplication getInstance() { return singleton; } /** * add Activity 添加Activity到栈 */ public void addActivity(Activity activity){ if(activityStack ==null){ activityStack =new Stack<Activity>(); } activityStack.add(activity); } /** * get current Activity 获取当前Activity(栈中最后一个压入的) */ public Activity currentActivity() { Activity activity = activityStack.lastElement(); return activity; } /** * 结束当前Activity(栈中最后一个压入的) */ public void finishActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** * 结束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } } /** * 结束指定类名的Activity */ public void finishActivity(Class<?> cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } } /** * 结束所有Activity */ public void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i)) { activityStack.get(i).finish(); } } activityStack.clear(); } /** * 退出应用程序 */ public void AppExit() { try { finishAllActivity(); } catch (Exception e) { } } }
注意,为了在我们自己的应用程序中使用这个自定义的Application类,而不是默认的Application类。需要在Manifest文件中修改一下<Application>的属性( android:name)
例如:
1 <application 2 android:icon="@drawable/icon" 3 android:label="@string/app_name" 4 android:name="your_package_name_here.MyApplication">
使用方法:
方法1: 之后我们在所有的activity的oncreate方法中通过getinstance得到一个MyApplication的实例,然后调用addActivity方法把当前的activity加入到stack中,如果要退出应用程序只需要调用AppExit方法即可。
方法2: 自定义一个继承Activity类的BaseActivity
1 public class BaseActivity extends Activity{ 2 @Override 3 protected void onCreate(Bundle savedInstanceState){ 4 super.onCreate(savedInstanceState); 5 //添加Activity到堆栈 6 MyApplication.getInstance().addActivity(this); 7 } 8 9 @Override 10 protected void onDestroy(){ 11 super.onDestroy(); 12 //结束Activity&从栈中移除该Activity 13 MyApplication.getInstance().finishActivity(this); 14 } 15 16 }
后续的Activity 都集成这个BaseActivity就可以了。
Android的官方文档中写到”没有必要自定义Application类”
There is normally no need to subclass Application.
但事实上,通过逆向工程国际大厂的Android应用,我发现各厂都自定义了Application类用以实现Global变量操作和Activity管理。所以我们也学习一下吧~(你也有兴趣通过逆向工程来借鉴一下别人的Android应用?别急,后续的教程里会陆续介绍的。)
以上的代码只是基本的Activity管理方案,以此为框架,我们可以加入更多关于Acitivity的管理方法以及其他全局变量的操作。
http://www.cnblogs.com/mainroadlee/p/how_to_exit_android_application.html
相关推荐
2 设置入口activity的启动模式android:launchMode="singleTask",重写onNewIntent方法, 在退出activity时,设置intent.setAction("exit_app");然后跳转到栈底activity, 这样就可以清除栈底之外的所有activity,...
"UncaughtException不让Android应用异常退出"这个主题,就是关于如何处理程序中的未捕获异常,以防止应用突然崩溃,从而提升用户体验。在这个问题上,我们可以从以下几个方面来探讨: 1. **...
除了点击两次返回键,Android应用还可以通过菜单按钮、滑动退出、设置退出选项等其他方式来提供退出功能。这些方式的选择取决于应用的需求和设计师的考量。 6. **注意事项**: - 不是所有的应用都适合使用双击...
这个主题主要涉及Android应用程序的生命周期、Activity栈管理和进程管理。以下是对这一问题的详细阐述: 首先,理解Android应用程序的基本结构是至关重要的。一个Android应用通常由一个或多个Activity组成,它们在...
本书从Android源码的角度由浅入深地剖析设计模式的运用,让工程师们把设计与模式重视起来,提升自己的设计能力与代码质量。因此本书适合的读者为初、中、高级Android工程师。另外,设计思想都是相通的,其他领域的...
在Android应用开发中,完全退出程序意味着结束所有与应用程序相关的活动(Activity)并释放系统资源。用户通常期望点击“退出”按钮后,整个应用程序能够完全关闭,而不是仅仅停留在后台运行。下面我们将详细讨论...
Android 应用崩溃自动启动 给用户给好的体验 本应用还可以扩展为类似京东崩溃时弹出信息反馈框 这需要你自己实现哦 另外欢迎关注我的新浪微博@MinganCai 有问题可以@我 我会尽快给你们回复的 雷锋
Android应用程序主要由代码和资源组成。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编译一次,就...
总结来说,Android应用程序框架通过提供MVC设计模式,帮助开发者构建稳定、可扩展的应用。理解并熟练运用这一框架,可以提升开发效率,提高应用的质量和用户体验。通过不断地学习和实践,开发者可以在Android开发...
《Android应用框架原理与程序设计(第三版)》是一本深度探讨Android开发核心框架的书籍,旨在帮助开发者深入了解Android系统的运作机制,提升应用程序的设计与实现能力。本书中文高清完整版,阅读体验优秀,适合...
如果想退出Android程序,一般都是调用finish()、System.exit(0)、android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序的效果,...
项目开发中发现问题、解决问题这个过程中有很...如果设计模式在编码设计生涯中用得极少,主要原因是对设计模式的理解还不够,认识不到问题的存在。 因为不能正确的分析问题、认识问题,当然也不可能很好的解决问题了。
有一种需要,我们在菜单项中点击退出应用程序,应用程序就退出,不需要回到MainActivity设计:有两个应用界面MainActivity和BActivity,以及用于程序的通用类ExitUtil 步骤: 1、添加一个类,名为ExitUtil 代码如下:...
这个名为"88个Android应用程序源码"的压缩包提供了一系列实例,对于初学者来说,它们是深入理解Android编程概念和实践技巧的理想材料。以下是对这些源码可能涵盖的知识点的详细解释: 1. **活动(Activity)管理**...
[14本经典Android开发教程]-4-Android应用程序开发36技 本书共分为4篇: ※ 第一篇:介绍应用框架概念、原理和特性。 ※ 第二篇:阐述应用框架之设计技巧。亦即,如何打造应用框架。 (注:如果你的职务是「使用」...
Android-完全退出程序的方法.zip Android-完全退出程序的方法.zip Android-完全退出程序的方法.zip
在Android应用程序中,有一类特殊的消息,是专门负责与用户进行交互的,它们就是触摸屏和键盘等输入事件。触摸屏和键盘事件是统一由系统输入管理器InputManager进行分发的。也就是说,InputManager负责从硬件接收...
在Android系统中,ActivityManager是Android提供的一个关键组件,它主要负责管理应用程序的生命周期和全局状态。本篇文章将深入探讨如何利用ActivityManager来获取正在运行的应用程序信息,这是Android开发中的一个...
在Android开发领域,学习和研究经典的Android应用程序是提升技能、理解设计模式以及最佳实践的有效途径。这个资源包包含了88个经典应用的源代码,对于初学者来说,这是一个宝贵的资料库,可以深入学习并理解Android...
这个压缩包提供了88个经典的Android应用程序源代码,对于开发者来说,这是一份宝贵的资源,可以帮助他们深入理解Android应用的实现机制,提升编程技巧,并借鉴优秀的编程实践。 1. **源代码分析**: - 分析源代码...