Android开发Activity管理工具类的操作方法
作者:浩宇软件开发
这篇文章主要介绍了Android开发Activity管理工具类,下面是一个完整的Activity管理工具类实现,可以帮助你管理应用中的所有Activity,方便一键退出应用、获取当前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. 使用说明
初始化:在BaseActivity或每个Activity的onCreate()方法中调用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityManager.getInstance().addActivity(this);
}在Activity销毁时移除:在onDestroy()方法中调用:
@Override
protected void onDestroy() {
super.onDestroy();
ActivityManager.getInstance().removeActivity(this);
}常用方法示例:
// 获取当前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
到此这篇关于Android开发Activity管理工具类的文章就介绍到这了,更多相关Android Activity管理工具类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
