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


首先,我们将管理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<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

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. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android中dispatchDraw分析
  7. 关于Android(安卓)Studio3.2新建项目Android(安卓)resource link
  8. Android(安卓)- Manifest 文件 详解
  9. Android四大基本组件介绍与生命周期

随机推荐

  1. android 中的 Bitmap 相关
  2. Android剪切板(ClipboardManager)复制文
  3. 面向忙碌开发者的 Android(安卓)知识点收
  4. Smalidea+IntelliJ IDEA/Android(安卓)St
  5. Android的listview、gridview 笔记
  6. Android(安卓)混淆提示 java.io.FileNotF
  7. Android(安卓)market 发布个人免费应用的
  8. Android深入浅出系列课程---Lesson0 SHW1
  9. Mac下配置android环境变量
  10. android 报错java.io.IOException: Permi