Activity 堆栈统一管理

        前段时间写项目,项目只提供一个中间交易的流程,接收对方的广播,然后走交易,之后将结果广播给调用方,但发广播之后,本APP所有的Activity都要finish掉,并本APP中只要有一个Activity  finish掉,都要发广播。所以就涉及到了对Activity的管理。

import android.app.Activity;
import android.content.Context;

import java.util.Stack;

/**
 *Activity管理类
 */
public class ActManager {
    private static Stack<Activity> activityStack;
    private static ActManager instance;

    static {
        instance = new ActManager();
    }

    public static ActManager getInstance() {
        return instance;
    }

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

    public boolean isLastActivity() {
        if (null != activityStack && activityStack.size() <= 1) {
            return true;
        }

        return false;
    }

    /**
     * 获取当前Activity
     */
    public Activity currentActivity() {
        Activity activity = activityStack.lastElement();
        return activity;
    }

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

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

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

    /**
     * 结束全部的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();
    }

    /**
     * 退出应用程序
     */
    public void AppExit(Context context) {
        try {
            finishAllActivity();
            android.app.ActivityManager activityMgr = (android.app.ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            activityMgr.restartPackage(context.getPackageName());
            System.exit(0);
        } catch (Exception e) {
        }
    }
}

使用:

在BaseActivity 里面的  OnCreate()方法里面调用 ActManager.getInstance().addActivity(this);

返回时判断是否只有一个Activity存在,使用例如。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && ActManager.getInstance().isLastActivity()) {
        Util.sendToResultOnBack(this);
    }
    return super.onKeyDown(keyCode, event);
}

退出的地方使用例如:

public static Handler mHandler = new Handler(Looper.getMainLooper());
public static void sendToResult(final Context context, String resultData) {
    if (null == context || TextUtils.isEmpty(resultData)) {
        return;
    }
    Intent resultIntent = new Intent();
    resultIntent.putExtra("xxxxx", resultData);
    resultIntent.setAction("xxxxx");
    context.sendBroadcast(resultIntent);
    mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            ActManager.getInstance().AppExit(context);
        }
    }, 200);
}



猜你喜欢

转载自blog.csdn.net/m840449234/article/details/80926367