一、
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
public static AppManager getAppManager(){
if(instance == null){
instance = new AppManager();
}
return instance;
}
public void AppExit(Context paramContext){
try{
finishAllActivity();
((ActivityManager)paramContext.getSystemService(Context.ACTIVITY_SERVICE))
.restartPackage(paramContext.getPackageName());
// 退出JVM(java虚拟机),释放所占内存资源,0表示正常退出(非0的都为异常退出)
System.exit(0);
return;
}catch (Exception e){
e.printStackTrace();
return;
}
}
public void addActivity(Activity paramActivity){
if(activityStack == null){
activityStack = new Stack<Activity>();
}
activityStack.add(paramActivity);
}
public Activity currentActivity(){
return activityStack.lastElement();
}
public void finishActivity(){
finishActivity(activityStack.lastElement());
}
public void finishActivity(Activity paramActivity){
if(paramActivity != null){
activityStack.remove(paramActivity);
paramActivity.finish();
}
}
public void finishActivity(Class<?> paramClass){
for(Activity activity: activityStack){
if(activity.getClass().equals(paramClass)){
finishActivity(activity);
}
}
}
public void finishAllActivity(){
int j = activityStack.size();
for(int i = 0; i < j;i++){
if(activityStack.get(i) != null){
((Activity)activityStack.get(i)).finish();
}
}
activityStack.clear();
}
public int getStackSize() { return (activityStack != null) ? activityStack.size() : 0; }
public void removeActivity(Activity paramActivity) {
if (paramActivity != null)
activityStack.remove(paramActivity);
}
}
使用
在BaseActivity#onCreate回调中添加 AppManager.getAppManager().addActivity(this)
获取当前栈顶activity AppManager.getAppManager().currentActivity()
在需要销毁的当前activity的地方调用 AppManager.getAppManager().finishActivity()
在需要销毁指定类别实例的地方调用 AppManager.getAppManager().finishActivity(XXX.class)
在需要销毁指定类别除外的其他实例的地方调用 AppManager.getAppManager().finishOtherActivity(XXX.class)
退出应用调用 AppManager.getAppManager().AppExit(context)
二、
import android.app.Activity;
import android.os.Process;
import android.support.v4.app.Fragment;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;
public class AppManagerUtils {
public static final long MILLISECONDS = 1000L;
private static Stack<Activity> mActivityStack;
private static Stack<Fragment> mFragmentStack;
private static List<AppManagerUtils.ExitCallback> exitCallbacks;
private AppManagerUtils() {
exitCallbacks = new ArrayList();
}
public static AppManagerUtils getAppManager() {
return AppManagerUtils.Instance.INSTANCE;
}
public static Stack<Activity> getActivityStack() {
return mActivityStack;
}
public static Stack<Fragment> getFragmentStack() {
return mFragmentStack;
}
public static Activity getActivity(Class<?> cls) {
if (mActivityStack != null) {
Iterator var1 = mActivityStack.iterator();
while(var1.hasNext()) {
Activity activity = (Activity)var1.next();
if (activity.getClass().equals(cls)) {
return activity;
}
}
}
return null;
}
public void addActivity(Activity activity) {
if (mActivityStack == null) {
mActivityStack = new Stack();
}
mActivityStack.add(activity);
}
public void removeActivity(Activity activity) {
if (activity != null && mActivityStack != null) {
mActivityStack.remove(activity);
}
}
public void addExitCallback(AppManagerUtils.ExitCallback exitCallback) {
if (exitCallbacks != null) {
exitCallbacks.add(exitCallback);
}
}
public void removeExitCallback(AppManagerUtils.ExitCallback exitCallback) {
if (exitCallbacks != null) {
exitCallbacks.remove(exitCallback);
}
}
public void cleanAllExitCallback() {
if (exitCallbacks != null) {
exitCallbacks.clear();
}
}
public boolean hasActivity() {
return mActivityStack != null ? mActivityStack.isEmpty() : false;
}
public Activity currentActivity() {
if (mActivityStack != null) {
Activity activity = (Activity)mActivityStack.lastElement();
return activity;
} else {
return null;
}
}
public void finishActivity() {
if (mActivityStack != null) {
Activity activity = (Activity)mActivityStack.lastElement();
this.finishActivity(activity);
}
}
public void finishActivity(Activity activity) {
if (activity != null && !activity.isFinishing()) {
activity.finish();
}
}
public void finishActivity(Class<?> cls) {
if (mActivityStack != null) {
Iterator var2 = mActivityStack.iterator();
while(var2.hasNext()) {
Activity activity = (Activity)var2.next();
if (activity.getClass().equals(cls)) {
this.finishActivity(activity);
break;
}
}
}
}
public void finishAllActivity() {
if (exitCallbacks != null && mActivityStack != null) {
int i = 0;
for(int size = mActivityStack.size(); i < size; ++i) {
if (null != mActivityStack.get(i)) {
this.finishActivity((Activity)mActivityStack.get(i));
}
}
mActivityStack.clear();
}
}
public void addFragment(Fragment fragment) {
if (mFragmentStack == null) {
mFragmentStack = new Stack();
}
mFragmentStack.add(fragment);
}
public void removeFragment(Fragment fragment) {
if (fragment != null) {
mFragmentStack.remove(fragment);
}
}
public boolean isFragment() {
return mFragmentStack != null ? mFragmentStack.isEmpty() : false;
}
public Fragment currentFragment() {
if (mFragmentStack != null) {
Fragment fragment = (Fragment)mFragmentStack.lastElement();
return fragment;
} else {
return null;
}
}
public void appExit() {
try {
this.finishAllActivity();
Process.killProcess(Process.myPid());
System.exit(10);
} catch (Exception var2) {
if (mActivityStack != null) {
mActivityStack.clear();
}
var2.printStackTrace();
}
}
public void callbackExitCallbacks() {
if (exitCallbacks != null && exitCallbacks.size() > 0) {
for(int i = 0; i < exitCallbacks.size(); ++i) {
AppManagerUtils.ExitCallback exitCallback = (AppManagerUtils.ExitCallback)exitCallbacks.get(i);
if (exitCallback != null) {
exitCallback.callback();
}
}
}
}
public Activity popActivity() {
return mActivityStack != null && !mActivityStack.empty() ? (Activity)mActivityStack.pop() : null;
}
private static class Instance {
public static AppManagerUtils INSTANCE = new AppManagerUtils();
private Instance() {
}
}
public interface ExitCallback {
void callback();
}
}