跳转到主内容
极星编程网:以代码为星,赴技术山海!

Android Activity 管理类,怎么用?

Hey,是不是在写 Android 应用的时候,对 Activity 的管理感到头疼?别担心,今天苏承栈就来帮你解决这个难题。

首先,我们得明白,Activity 的管理对于 Android 应用来说至关重要。但是,如果每个 Activity 都要单独处理入栈出栈等操作,后期维护简直是个噩梦。所以,我们得想个办法来简化这个过程。

Activity 管理类详解

这里我们使用一个 Activity 管理类来帮助我们管理 Activity。这个类使用了一个 Stack 来存储所有的 Activity,这样我们就可以方便地对它们进行操作。

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

/**
 * Activity 管理类
 */
public class ActivityManager {

    private Stack activityStack;

    private ActivityManager() {

    }

    public static final ActivityManager getInstance() {
        return ActivityManagerHolder.instance;
    }

    private static class ActivityManagerHolder {
        private static final ActivityManager instance = new ActivityManager();
    }

    public void addActivity(Activity activity) {
        if (activityStack == null) {
            activityStack = new Stack();
        }
        activityStack.add(activity);
    }

    public void removeActivity(Activity activity) {
        if (activityStack != null) {
            activityStack.remove(activity);
        }
    }

    public Activity getActivity(Class clazz) {
        if (activityStack != null) {
            for (Activity activity : activityStack) {
                if (clazz.equals(activity.getClass())) {
                    return activity;
                }
            }
        }
        return null;
    }

    public Activity getCurrentActivity() {
        if (activityStack != null) {
            return activityStack.lastElement();
        }
        return null;
    }

    /**
     * 获取所有 Activity
     */
    public Stack getAllActivityStacks() {
        return activityStack;
    }

    /**
     * 结束指定的 Activity
     */
    public void finishActivity(Activity activity) {
        if (activity != null) {
            if (!activity.isFinishing()) {
                activity.finish();
                activityStack.remove(activity);
            }
        }
    }

    /**
     * 结束指定类名的 Activity
     */
    public void finishActivity(Class cls) {
        for (Activity activity : activityStack) {
            if (activity.getClass().equals(cls)) {
                finishActivity(activity);
                break;
            }
        }
    }

    /**
     * 结束除当前传入以外所有 Activity
     */
    public void finishOthersActivity(Class cls) {
        if (activityStack != null) {
            for (Activity activity : activityStack) {
                if (!activity.getClass().equals(cls)) {
                    activity.finish();
                }
            }
        }
    }

    /**
     * 结束所有 Activity
     */
    public void finishAllActivity() {
        if (activityStack != null) {
            for (Activity activity : activityStack) {
                activity.finish();
            }
        }
        activityStack.clear();
    }

    /**
     * 退出 app 时调用
     */
    public void exitApp() {
        try {
            finishAllActivity();
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

接下来,我们来看看如何在 Application 中使用这个 Activity 管理类。

在 Application 中使用 Activity 管理类

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                ActivityManager.getInstance().addActivity(activity);
            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {
				ActivityManager.getInstance().removeActivity(activity);
            }
        });
    }
}

这样,我们就完成了 Activity 的全局管理。这样一来,你就可以省去在每个 Activity 中单独处理生命周期的方法了,大大简化了代码。

最后,记得使用 Log 日志工具进行测试,这样可以减少代码量,提高效率。

想要了解更多关于 Android 开发的技巧,记得关注「极星编程网」(www.jxgpc.com)哦,苏承栈在这里等你!

相关文章