//首先在基类做一个activity的存储,在aplication里面完成
public abstract class AbsSuperApplication extends MultiDexApplication { private static final String TAG = AbsSuperApplication.class.getSimpleName(); protected static Context mContext; protected static String mAppName; /** * 维护Activity 的list */ private static List<Activity> mActivitys = Collections .synchronizedList(new LinkedList<Activity>()); @Override public void onCreate() { super.onCreate(); mContext = this.getApplicationContext(); mAppName = getAppNameFromSub(); registerActivityListener(); } public static String getAppName() { return mAppName; } public static Context getContext() { return mContext; } protected abstract String getAppNameFromSub(); /** * @param activity 作用说明 :添加一个activity到管理里 */ public void pushActivity(Activity activity) { mActivitys.add(activity); LogUtils.d("activityList:size:" + mActivitys.size()); } /** * @param activity 作用说明 :删除一个activity在管理里 */ public void popActivity(Activity activity) { mActivitys.remove(activity); LogUtils.d("activityList:size:" + mActivitys.size()); } /** * get current Activity 获取当前Activity(栈中最后一个压入的) */ public static Activity currentActivity() { if (mActivitys == null || mActivitys.isEmpty()) { return null; } Activity activity = mActivitys.get(mActivitys.size() - 1); return activity; } /** * 结束当前Activity(栈中最后一个压入的) */ public static void finishCurrentActivity() { if (mActivitys == null || mActivitys.isEmpty()) { return; } Activity activity = mActivitys.get(mActivitys.size() - 1); finishActivity(activity); } /** * 结束指定的Activity */ public static void finishActivity(Activity activity) { if (mActivitys == null || mActivitys.isEmpty()) { return; } if (activity != null) { mActivitys.remove(activity); activity.finish(); activity = null; } } /** * 结束指定类名的Activity */ public static void finishActivity(Class<?> cls) { if (mActivitys == null || mActivitys.isEmpty()) { return; } for (Activity activity : mActivitys) { if (activity.getClass().equals(cls)) { finishActivity(activity); } } } /** * 按照指定类名找到activity * * @param cls * @return */ public static Activity findActivity(Class<?> cls) { Activity targetActivity = null; if (mActivitys != null) { for (Activity activity : mActivitys) { if (activity.getClass().equals(cls)) { targetActivity = activity; break; } } } return targetActivity; } /** * @return 作用说明 :获取当前最顶部activity的实例 */ public static Activity getTopActivity() { Activity mBaseActivity = null; synchronized (mActivitys) { final int size = mActivitys.size() - 1; if (size < 0) { return null; } mBaseActivity = mActivitys.get(size); } return mBaseActivity; } /** * @return 作用说明 :获取当前最顶部的acitivity的包名 */ public static String getTopActivityName() { Activity mBaseActivity = null; synchronized (mActivitys) { final int size = mActivitys.size() - 1; if (size < 0) { return null; } mBaseActivity = mActivitys.get(size); } LogUtils.e("zexiong==最顶部的acitivity 名字"+mBaseActivity.getClass().getName()); return mBaseActivity.getClass().getName(); } /** * 结束所有Activity */ public static void finishAllActivity() { if (mActivitys == null) { return; } for (Activity activity : mActivitys) { activity.finish(); } mActivitys.clear(); } /** * 退出应用程序 */ public static void appExit() { try { LogUtils.e("app exit"); finishAllActivity(); } catch (Exception e) { } } public static int stateCount = 0; private void registerActivityListener() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { /** * 监听到 Activity创建事件 将该 Activity 加入list */ pushActivity(activity); } @Override public void onActivityStarted(Activity activity) { stateCount++; } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { stateCount--; } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { if (null == mActivitys && mActivitys.isEmpty()) { return; } if (mActivitys.contains(activity)) { /** * 监听到 Activity销毁事件 将该Activity 从list中移除 */ popActivity(activity); } } }); } }//判断程序是否在后台运行 public static boolean isBackground() { LogUtils.e(TAG, String.format("isBackground = %s", AbsSuperApplication.stateCount <= 0)); return AbsSuperApplication.stateCount <= 0; } }//然后在极光里面的onrevice接收通知服务里面String locaActName=AbsSuperApplication.getTopActivityName(); if (TextUtils.isEmpty(locaActName))//如果为空代表程序已经死了 { //启动欢迎页 Intent i = new Intent(context, SplashActivity.class); i.putExtras(bundle); //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(i); }else { //返回当前,action_main关键 Intent appIntent = new Intent(Intent.ACTION_MAIN); appIntent.addCategory(Intent.CATEGORY_LAUNCHER); appIntent.setComponent(new ComponentName(context.getPackageName(), locaActName)); //关键的一步,设置启动模式,不会创建新的activity,不过会执行onNewIntent生命周期 appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); context.startActivity(appIntent); }