如何干净彻底地退出Android应用程序,是很多开发者的心头痒。如何干净地关闭所有已打开的Activity? 如何关闭指定的Activity? 如何关闭一类Activity? 这里,我们提出一种通过实现对Application的扩展,实现了一种高效管理Activity,实现Android干净彻底地退出应用程序。


首先,我们将管理Activity的功能通过一个扩展的Application类来实现。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 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<application2android: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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class BaseActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super .onCreate(savedInstanceState); //添加Activity到堆栈 MyApplication.getInstance().addActivity( this ); } @Override protected void onDestroy(){ super .onDestroy(); //结束Activity&从栈中移除该Activity MyApplication.getInstance().finishActivity( this ); } }


后续的Activity 都集成这个BaseActivity就可以了。

Android的官方文档中写到”没有必要自定义Application类”

There is normally no need to subclass Application.

但事实上,通过逆向工程国际大厂的Android应用,我发现各厂都自定义了Application类用以实现Global变量操作和Activity管理。所以我们也学习一下吧~(你也有兴趣通过逆向工程来借鉴一下别人的Android应用?别急,后续的教程里会陆续介绍的。)

以上的代码只是基本的Activity管理方案,以此为框架,我们可以加入更多关于Acitivity的管理方法以及其他全局变量的操作。

欢迎访问 http://www.mobiletuts.me 一个及时更新的Android开发教程网站


更多相关文章

  1. Android通过Alpha实现渐变效果的几个方法
  2. Android声音管理方法
  3. eclipse adb 启动失败,无法匹配android设备 的解决方案
  4. 安装Android(安卓)Studio遇到中文乱码的解决方法
  5. Android学习路线总结,绝对干货
  6. Android开发和调试
  7. Android中AVD(Android(安卓)Virtual Device)不能启动的处理方法
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android设计支持库(Android Design Suppo
  2. Android--用JSON解析数据
  3. Kali Linux将Android设备变成黑客瑞士军
  4. Android通话记录过滤和监听
  5. Android 源码系列之从安全的角度深入理解
  6. android中的五大布局和过程流向
  7. Android(安卓)定制页面切换动画效果
  8. 安卓 WebView加载本地图片时居中显示
  9. Android类似UC浏览器翻屏以及popuwindow
  10. 自定义圆形的ProgressBar