原创
Android中对所有的Activity进行统一栈管理
温馨提示:
本文最后更新于 2020年10月29日,已超过 1,485 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
在Android开发中,大部分人都会对所有的Activity进行管理,方便我们操作以及性能优化。
AppManager
对所有的Activity
进行栈管理,方便我们对某一个Activity操作或者是对所有的Activity进行操作。比如:登录之后,我需要退出程序,就可以使用这里的appExit
。
import android.app.Activity;
import android.util.Log;
import java.util.Iterator;
import java.util.Stack;
/**
* 对APP中所有的Activity进行管理,统一放在Stack中处理。
*
* @author Zhaopo Liu
*/
public class AppManager {
private final String TAG = "AppManager";
public static Stack<Activity> getActivityStack() {
return activityStack;
}
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager() {
}
/**
* 单一实例
*/
public static AppManager getInstance() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<>();
}
activityStack.add(activity);
}
/**
* 获取栈顶Activity(堆栈中最后一个压入的)
*/
public Activity getTopActivity() {
return activityStack.lastElement();
}
/**
* 结束栈顶Activity(堆栈中最后一个压入的)
*/
public void finishTopActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定类名的Activity
*
* @param cls
*/
public void finishActivity(Class<?> cls) {
Iterator iterator = activityStack.iterator();
while (iterator.hasNext()) {
Activity activity = (Activity) iterator.next();
if (activity.getClass().equals(cls)) {
iterator.remove();
activity.finish();
}
}
}
/**
* 结束所有Activity
*/
@SuppressWarnings("WeakerAccess")
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();
System.exit(0);
android.os.Process.killProcess(android.os.Process.myPid());
} catch (Exception e) {
Log.e(TAG, "退出App异常:" + e.getMessage());
}
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
}
}
/**
* 得到指定类名的Activity
*/
public Activity getActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
return activity;
}
}
return null;
}
}
BaseActivity
基类,让所有的Activity继承它。(因为我们肯定不可能是所有的Activity
都一个一个区继承AppCompatActivity
,写一个基类帮助我们进行统一的Activity
栈管理)
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.withive.power_grid.app_manager.AppManager;
/**
* BaseActivity基类,对所有的Activity进行管理
*
* @author Zhaopo Liu
*/
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 添加到栈中
AppManager.getInstance().addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 从栈中移除
AppManager.getInstance().finishActivity(this);
}
}
- 使用:
public class HomeActivity extends BaseActivity {
// 略......
}
- 本文标签: Android Java
- 本文链接: http://www.lzhpo.com/article/148
- 版权声明: 本文由lzhpo原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
热门推荐
相关文章
该篇文章的评论功能已被站长关闭