前言:最近在小米商店上架应用时发现,在小米云测上,小米note高配版 在使用System.exit(0)时会报错,通不过Monkey 测试。找了一段时间才发现这个System.exit(0)在小米的Rom上会失效。所以引入了ActivityStackManager 栈管理,调用getManager().finishAllActivity()就能顺利通过小米应用商店的monkey测试了。
/**
* Activity栈管理
*/
public class ActivityStackManager {
private static ActivityStackManager instance = null;
private static Stack<Activity> activityStack;// 栈
/**
* 私有构造
*/
private ActivityStackManager() {
activityStack = new Stack<Activity>();
}
/**
* 单例实例
*
* @return
*/
public static ActivityStackManager getManager() {
if (instance == null) {
synchronized (ActivityStackManager.class) {
if (instance == null) {
instance = new ActivityStackManager();
}
}
}
return instance;
}
/**
* 压栈
*
* @param activity
*/
public void push(Activity activity) {
activityStack.push(activity);
}
/**
* 出栈
*
* @return
*/
public Activity pop() {
if (activityStack.isEmpty())
return null;
return activityStack.pop();
}
/**
* 栈顶
*
* @return
*/
public Activity peek() {
if (activityStack.isEmpty())
return null;
return activityStack.peek();
}
/**
* 用于异地登录或者退出时清除activity
*/
public void clearActivity() {
while (!activityStack.isEmpty()) {
Activity activity = activityStack.pop();
/*if (activity instanceof LoginActivity) {
} else {
activity.finish();
}*/
}
}
/**
* 移除
*
* @param activity
*/
public void remove(Activity activity) {
if (activityStack.size() > 0 && activity == activityStack.peek())
activityStack.pop();
else
activityStack.remove(activity);
}
/**
* 是否存在栈
*
* @param activity
* @return
*/
public boolean contains(Activity activity) {
return activityStack.contains(activity);
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
while (!activityStack.isEmpty()) {
activityStack.pop().finish();
}
}
/**
* 退出应用程序
*
* @param context
*/
public void exitApp(Context context) {
try {
finishAllActivity();
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage(context.getPackageName());
//清除通知栏
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();
android.os.Process.killProcess(android.os.Process.myPid());
} catch (Exception e) {
}
}
}
在BaseActivity 的oncreate()中实现
ActivityStackManager.getManager().push(this);