package com.android.app_base.manager; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.text.TextUtils; import android.util.Log; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import com.blankj.utilcode.util.ActivityUtils; import com.blankj.utilcode.util.AppUtils; import java.util.Stack; /** * @author ljj * @date 2023.3.1 * @desc APP行为管理 */ public class AppManager { private static Stack activityStack; private static Stack fragmentStack; private static AppManager instance; private AppManager() { } /** * 单例模式 * * @return AppManager */ public static AppManager getAppManager() { if (instance == null) { instance = new AppManager(); } return instance; } public static Stack getActivityStack() { return activityStack; } public static Stack getFragmentStack() { return fragmentStack; } /** * 添加Activity到堆栈 */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack(); } activityStack.add(activity); } /** * 移除指定的Activity */ public void removeActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); } } /** * 是否有activity */ public boolean isActivity() { if (activityStack != null) { return !activityStack.isEmpty(); } return false; } /** * 获取当前Activity(堆栈中最后一个压入的) */ public Activity currentActivity() { return activityStack.lastElement(); } /** * 开始指定类名的 Activity */ public void startActivity(Class T){ ActivityUtils.startActivity(T); } public boolean startActivity(@NonNull Intent intent) { return ActivityUtils.startActivity(intent); } public void startActivityForName(String name) { if(TextUtils.isEmpty(name))return; try { startActivity(Class.forName(name)); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 结束当前Activity(堆栈中最后一个压入的) */ public void finishCurrentActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** * 结束指定的Activity */ public void finishActivity(Activity activity) { if (activity != null) { if (!activity.isFinishing()) { activity.finish(); } } } /** * 结束指定类名的Activity */ public void finishActivity(Class cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { finishActivity(activity); break; } } } /** * 结束所有Activity */ public void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i)) { finishActivity(activityStack.get(i)); } } activityStack.clear(); } /** * 获取指定的Activity */ public Activity getActivity(Class cls) { if (activityStack != null) for (Activity activity : activityStack) { if (activity.getClass().equals(cls)) { return activity; } } return null; } /** * 添加Fragment到堆栈 */ public void addFragment(Fragment fragment) { if (fragmentStack == null) { fragmentStack = new Stack(); } fragmentStack.add(fragment); } /** * 移除指定的Fragment */ public void removeFragment(Fragment fragment) { if (fragment != null) { fragmentStack.remove(fragment); } } /** * 是否有Fragment */ public boolean isFragment() { if (fragmentStack != null) { return !fragmentStack.isEmpty(); } return false; } /** * 获取当前Activity(堆栈中最后一个压入的) */ public Fragment currentFragment() { if (fragmentStack != null) { Fragment fragment = fragmentStack.lastElement(); return fragment; } return null; } /** * 退出应用程序 */ public void AppExit() { try { finishAllActivity(); // 杀死该应用进程 // android.os.Process.killProcess(android.os.Process.myPid()); // 调用 System.exit(n) 实际上等效于调用: // Runtime.getRuntime().exit(n) // finish()是Activity的类方法,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理;当调用System.exit(0)时,退出当前Activity并释放资源(内存),但是该方法不可以结束整个App如有多个Activty或者有其他组件service等不会结束。 // 其实android的机制决定了用户无法完全退出应用,当你的application最长时间没有被用过的时候,android自身会决定将application关闭了。 //System.exit(0); } catch (Exception e) { activityStack.clear(); e.printStackTrace(); } } /** * 重启应用 */ public void restartApp() { AppUtils.relaunchApp(); } public void restartApp(Context context) { Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); AppExit(); } }