Android开发,Activity管理工具类

1. 问题描述

在Android开发过程中,从A页面跳转到B页面(不要在A页面调用finish()),如果在B页面调用System.exit(0)方法,并不能退出app,而是又重新启动app。原因是从A页面跳转到B页面的时候,没有把A销毁掉,从而导致app被重启,所以需要对Activity进行管理起来

2. Activity管理工具类 (Java实现)

下面是一个完整的Activity管理工具类实现,可以帮助你管理应用中的所有Activity,方便一键退出应用、获取当前Activity等操作。

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

    private static ActivityManager instance;
    private Stack<Activity> activityStack; // Activity栈

    private ActivityManager() {
    
    
    }

    /**
     * 单例模式
     */
    public static ActivityManager getInstance() {
    
    
        if (instance == null) {
    
    
            synchronized (ActivityManager.class) {
    
    
                if (instance == null) {
    
    
                    instance = new ActivityManager();
                }
            }
        }
        return instance;
    }

    /**
     * 添加Activity到堆栈
     */
    public void addActivity(Activity activity) {
    
    
        if (activityStack == null) {
    
    
            activityStack = new Stack<>();
        }
        activityStack.add(activity);
    }

    /**
     * 获取当前Activity(堆栈中最后一个压入的)
     */
    public Activity currentActivity() {
    
    
        if (activityStack == null || activityStack.isEmpty()) {
    
    
            return null;
        }
        return activityStack.lastElement();
    }

    /**
     * 结束当前Activity(堆栈中最后一个压入的)
     */
    public void finishActivity() {
    
    
        if (activityStack == null || activityStack.isEmpty()) {
    
    
            return;
        }
        Activity activity = activityStack.lastElement();
        finishActivity(activity);
    }

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

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

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

    /**
     * 退出应用程序
     */
    public void exitApp() {
    
    
        try {
    
    
            finishAllActivity();
            // 退出JVM,释放所有内存
            System.exit(0);
            // 杀死该应用进程
            android.os.Process.killProcess(android.os.Process.myPid());
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

    /**
     * 获取指定类名的Activity
     */
    public Activity getActivity(Class<?> cls) {
    
    
        if (activityStack == null) return null;
        
        for (Activity activity : activityStack) {
    
    
            if (activity.getClass().equals(cls)) {
    
    
                return activity;
            }
        }
        return null;
    }

    /**
     * 移除Activity(但不finish)
     */
    public void removeActivity(Activity activity) {
    
    
        if (activity != null && activityStack != null) {
    
    
            activityStack.remove(activity);
        }
    }

    /**
     * 返回栈中Activity的数量
     */
    public int getActivityCount() {
    
    
        return activityStack == null ? 0 : activityStack.size();
    }
}

3. 使用说明

  1. 初始化:在BaseActivity或每个Activity的onCreate()方法中调用:
@Override
protected void onCreate(Bundle savedInstanceState) {
    
    
    super.onCreate(savedInstanceState);
    ActivityManager.getInstance().addActivity(this);
}
  1. 在Activity销毁时移除:在onDestroy()方法中调用:
@Override
protected void onDestroy() {
    
    
    super.onDestroy();
    ActivityManager.getInstance().removeActivity(this);
}
  1. 常用方法示例:
// 获取当前Activity
Activity currentActivity = ActivityManager.getInstance().currentActivity();

// 结束当前Activity
ActivityManager.getInstance().finishActivity();

// 结束指定Activity
ActivityManager.getInstance().finishActivity(MainActivity.class);

// 退出应用程序
ActivityManager.getInstance().exitApp();

// 结束所有Activity但不退出应用
ActivityManager.getInstance().finishAllActivity();

4. 注意事项

  • 需要在每个Activity的生命周期中正确添加和移除Activity
  • 退出应用时建议使用exitApp()方法,它会清理所有Activity并退出进程
  • 这个工具类使用了单例模式,确保全局只有一个实例管理所有Activity

猜你喜欢

转载自blog.csdn.net/jky_yihuangxing/article/details/146904287
今日推荐