服务热线:0755-83100310(7X24h)

Android设计模式]Android退出应用程序终极方法

发布者:admin    发布时间:2019-08-18    人气:286

当前位置:首页 > 动态 > 技术分享

如何干净彻底地退出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>的属性。

退出应用程序11.jpg

使用方法:

 

方法1: 之后我们在所有的activity的oncreate方法中通过getinstance得到一个MyApplication的实例,然后调用addActivity方法把当前的activity加入到stack中,如果要退出应用程序只需要调用AppExit方法即可。

 

方法2: 自定义一个继承Activity类的BaseActivity:

退出应用程序22.jpg

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