基本上每一个项目都会需要用到,总体把控每一个Activity的状态。网上搜了一下,使用了一下,感觉写的有问题,重写了一下,测试可行。
栈:也就是stack,学过java的应该也了解,栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方,Java都是自动管理栈和堆,堆是先进先出,栈是先进后出。了解了这些我们就可以这样写:
import android.app.Activity;
import java.util.Stack;
/**
* Created on Android Studio.
* User: Sunday
* Time: 2016/12/22 16:01
* Email:
* TODO activity堆栈式管理
*/
public class AppManager {
private static Stack<Activity> activityStack;
public AppManager() {
}
/**
* 单一实例
*/
public static AppManager getInstance() {
return SingleApp.INSTANCE;
}
public static class SingleApp {
public static AppManager INSTANCE = new AppManager();
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 移除Activity
*/
public void removeActivity(Activity activity) {
activityStack.remove(activity);
}
/**
* 获取指定的Activity
*/
public static Activity getActivity(Class<?> cls) {
if (activityStack != null)
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
return activity;
}
}
return null;
}
/**
* 获取当前显示Activity(堆栈中最后一个传入的activity)
*/
public Activity getLastActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 获取所有Activity
*/
public Stack<Activity> getAllActivityStacks() {
return activityStack;
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
if (!activity.isFinishing()) {
activity.finish();
activityStack.remove(activity);
}
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
break;
}
}
}
/**
* 结束除当前传入以外所有Activity
*/
public void finishOthersActivity(Class<?> cls) {
if (activityStack != null)
for (Activity activity : activityStack) {
if (!activity.getClass().equals(cls)) {
activity.finish();
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
if (activityStack != null)
for (Activity activity : activityStack) {
activity.finish();
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void AppExit() {
try {
finishAllActivity();
android.os.Process.killProcess(android.os.Process.myPid());// 杀死该应用进程
System.exit(0);
} catch (Exception e) {
}
}
}
这样统一使用,保证每一个Activity继承BaseActivity:
public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppManager.getInstance().addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
AppManager.getInstance().removeActivity(this);
}
}