AndroidUtils(二)Activity管理类

本文介绍了一个用于管理Android应用程序中Activity的实用工具类。该类提供了一系列的方法来控制Activity的生命周期,如添加、获取、结束Activity等操作,并实现了Activity的单例模式管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看注解;

看注解;

看注解;

package com.example.bandofbrotherszts.androidphoneinfo;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.AnimRes;
import android.support.annotation.NonNull;
import android.support.v4.util.ArrayMap;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;

/**
 * 应用程序Activity管理类
 */
public class ActivityManager {
    private static Stack
  
    activityStack;
    private static ActivityManager instance = null;
    private static Context context ;
    private ActivityManager() {
    }
    /**
     * 单例
     */
    public static ActivityManager getAppManager(Context mcontext) {
        if (instance == null) {
            instance = new ActivityManager();
        }
        context = mcontext.getApplicationContext();
        return instance;
    }

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

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

    /**
     * 结束当前Activity
     */
    public void finishActivity() {
        Activity activity = activityStack.lastElement();
        if (activity != null) {
            activityStack.remove(activity);
            activity.finish();
            activity = null;
        }
    }

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

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

     /**
     * 结束指定位置的Activity
     */
    public void finishPositionActivity(int index) {
       Activity activity = activityStack.get(index);
        finishActivity(activity);
    
    }

    /**
     * 结束所有Activity
     */
    public void finishAllActivity() {
        for (int i = 0, size = activityStack.size(); i < size; i++) {
            if (null != activityStack.get(i)) {
                activityStack.get(i).finish();
            }
        }
        activityStack.clear();
    }
    /**
     * 判断是否存在Activity
     *
     * @param packageName 包名
     * @param className   activity全路径类名
     * @return {@code true}: 是
   
{@code false}: 否 */ public boolean isActivityExists(@NonNull final String packageName, @NonNull final String className) { Intent intent = new Intent(); intent.setClassName(packageName, className); return !(context.getPackageManager().resolveActivity(intent, 0) == null || intent.resolveActivity(context.getPackageManager()) == null || context.getPackageManager().queryIntentActivities(intent, 0).size() == 0); } /** * 启动Activity * * @param cls activity类 */ public void startActivity(@NonNull final Class cls) { startActivity(context, null, context.getPackageName(), cls.getName(), null); } /** * 启动Activity * * @param cls activity类 * @param options 跳转动画 */ public void startActivity(@NonNull final Class cls, @NonNull final Bundle options) { startActivity(context, null, context.getPackageName(), cls.getName(), options); } /** * 启动Activity * * @param activity activity * @param cls activity类 */ public void startActivity(@NonNull final Activity activity, @NonNull final Class cls) { startActivity(activity, null, activity.getPackageName(), cls.getName(), null); } /** * 启动Activity * * @param activity activity * @param cls activity类 * @param options 跳转动画 */ public void startActivity(@NonNull final Activity activity, @NonNull final Class cls, @NonNull final Bundle options) { startActivity(activity, null, activity.getPackageName(), cls.getName(), options); } /** * 启动Activity * * @param activity activity * @param cls activity类 * @param enterAnim 入场动画 * @param exitAnim 出场动画 */ public void startActivity(@NonNull final Activity activity, @NonNull final Class cls, @AnimRes final int enterAnim, @AnimRes final int exitAnim) { startActivity(activity, null, activity.getPackageName(), cls.getName(), null); activity.overridePendingTransition(enterAnim, exitAnim); } /** * 启动Activity * * @param extras extras * @param cls activity类 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Class cls) { startActivity(context, extras, context.getPackageName(), cls.getName(), null); } /** * 启动Activity * * @param extras extras * @param cls activity类 * @param options 跳转动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Class cls, @NonNull final Bundle options) { startActivity(context, extras, context.getPackageName(), cls.getName(), options); } /** * 启动Activity * * @param extras extras * @param activity activity * @param cls activity类 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final Class cls) { startActivity(activity, extras, activity.getPackageName(), cls.getName(), null); } /** * 启动Activity * * @param extras extras * @param activity activity * @param cls activity类 * @param options 跳转动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final Class cls, @NonNull final Bundle options) { startActivity(activity, extras, activity.getPackageName(), cls.getName(), options); } /** * 启动Activity * * @param extras extras * @param activity activity * @param cls activity类 * @param enterAnim 入场动画 * @param exitAnim 出场动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final Class cls, @AnimRes final int enterAnim, @AnimRes final int exitAnim) { startActivity(activity, extras, activity.getPackageName(), cls.getName(), null); activity.overridePendingTransition(enterAnim, exitAnim); } /** * 启动Activity * * @param pkg 包名 * @param cls 全类名 */ public void startActivity(@NonNull final String pkg, @NonNull final String cls) { startActivity(context, null, pkg, cls, null); } /** * 启动Activity * * @param pkg 包名 * @param cls 全类名 * @param options 动画 */ public void startActivity(@NonNull final String pkg, @NonNull final String cls, @NonNull final Bundle options) { startActivity(context, null, pkg, cls, options); } /** * 启动Activity * * @param activity activity * @param pkg 包名 * @param cls 全类名 */ public void startActivity(@NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls) { startActivity(activity, null, pkg, cls, null); } /** * 启动Activity * * @param activity activity * @param pkg 包名 * @param cls 全类名 * @param options 动画 */ public void startActivity(@NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls, @NonNull final Bundle options) { startActivity(activity, null, pkg, cls, options); } /** * 启动Activity * * @param activity activity * @param pkg 包名 * @param cls 全类名 * @param enterAnim 入场动画 * @param exitAnim 出场动画 */ public void startActivity(@NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls, @AnimRes final int enterAnim, @AnimRes final int exitAnim) { startActivity(activity, null, pkg, cls, null); activity.overridePendingTransition(enterAnim, exitAnim); } /** * 启动Activity * * @param extras extras * @param pkg 包名 * @param cls 全类名 */ public void startActivity(@NonNull final Bundle extras, @NonNull final String pkg, @NonNull final String cls) { startActivity(context, extras, pkg, cls, null); } /** * 启动Activity * * @param extras extras * @param pkg 包名 * @param cls 全类名 * @param options 动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final String pkg, @NonNull final String cls, @NonNull final Bundle options) { startActivity(context, extras, pkg, cls, options); } /** * 启动Activity * * @param activity activity * @param extras extras * @param pkg 包名 * @param cls 全类名 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls) { startActivity(activity, extras, pkg, cls, null); } /** * 启动Activity * * @param extras extras * @param activity activity * @param pkg 包名 * @param cls 全类名 * @param options 动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls, @NonNull final Bundle options) { startActivity(activity, extras, pkg, cls, options); } /** * 启动Activity * * @param extras extras * @param pkg 包名 * @param cls 全类名 * @param enterAnim 入场动画 * @param exitAnim 出场动画 */ public void startActivity(@NonNull final Bundle extras, @NonNull final Activity activity, @NonNull final String pkg, @NonNull final String cls, @AnimRes final int enterAnim, @AnimRes final int exitAnim) { startActivity(activity, extras, pkg, cls, null); activity.overridePendingTransition(enterAnim, exitAnim); } private void startActivity(final Context context, final Bundle extras, final String pkg, final String cls, final Bundle options) { Intent intent = new Intent(Intent.ACTION_VIEW); if (extras != null) intent.putExtras(extras); intent.setComponent(new ComponentName(pkg, cls)); if (!(context instanceof Activity)) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } if (options != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { context.startActivity(intent, options); } else { context.startActivity(intent); } } /** * 退出应用程序 */ public void appExit(Context context) { try { finishAllActivity(); // ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); // manager.killBackgroundProcesses(context.getPackageName()); System.exit(0); android.os.Process.killProcess(android.os.Process.myPid()); }catch (Exception e){ e.printStackTrace(); } } /** * 获取栈顶Activity * * @return 栈顶Activity */ public Activity getTopActivity() { try { Class activityThreadClass = Class.forName("android.app.ActivityThread"); Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null); Field activitiesField = activityThreadClass.getDeclaredField("mActivities"); activitiesField.setAccessible(true); Map activities; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { activities = (HashMap) activitiesField.get(activityThread); } else { activities = (ArrayMap) activitiesField.get(activityThread); } for (Object activityRecord : activities.values()) { Class activityRecordClass = activityRecord.getClass(); Field pausedField = activityRecordClass.getDeclaredField("paused"); pausedField.setAccessible(true); if (!pausedField.getBoolean(activityRecord)) { Field activityField = activityRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); return (Activity) activityField.get(activityRecord); } } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 获取launcher activity * * @param packageName 包名 * @param context 上下文 * @return launcher activity */ public String getLauncherActivity( Context context, String packageName) { Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PackageManager pm = context.getPackageManager(); List info = pm.queryIntentActivities(intent, 0); for (ResolveInfo aInfo : info) { if (aInfo.activityInfo.packageName.equals(packageName)) { return aInfo.activityInfo.name; } } return "no " + packageName; } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值