前段时间写项目,项目只提供一个中间交易的流程,接收对方的广播,然后走交易,之后将结果广播给调用方,但发广播之后,本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); }