下面列出了java.util.Stack#iterator ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 结束所有 Activity
* @return {@link ActivityUtils}
*/
public ActivityUtils finishAllActivity() {
synchronized (mActivityStacks) {
// 保存新的堆栈, 防止出现同步问题
Stack<Activity> stack = new Stack<>();
stack.addAll(mActivityStacks);
// 清空全部, 便于后续操作处理
mActivityStacks.clear();
// 进行遍历移除
Iterator<Activity> iterator = stack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
if (activity != null && !activity.isFinishing()) {
activity.finish();
// 删除对应的 Item
iterator.remove();
}
}
// 移除数据, 并且清空内存
stack.clear();
stack = null;
}
return this;
}
public List<E> pathTo(N v) {
if (!hasPathTo(v)) {
return null;
}
Stack<E> path = new Stack<>();
for (DirectedEdge<N, E> e = edgeTo.get(v); e != null; e = edgeTo.get(e.from)) {
path.push(e.e);
}
Iterator<E> it = path.iterator();
List<E> ret = new LinkedList<>();
while (it.hasNext()) {
ret.add(it.next());
}
return Util.reverse(ret); // TODO aql apparently this is backwards
}
/**
* 清理无用Context
* @param stack
*/
public void clearDestroyedContext(Stack<ContextInstanceWrapper> stack) {
ReentrantReadWriteLock.WriteLock writeLock = null;
// 查找对应锁
if (stack == openedActivity) {
writeLock = ACTIVITY_STACK_LOCK.writeLock();
} else if (stack == openedService) {
// 不修改,加读锁
writeLock = SERVICE_STACK_LOCK.writeLock();
}
if (writeLock != null) {
writeLock.lock();
}
// 清理掉Destroy的Context
Iterator<ContextInstanceWrapper> iterator = stack.iterator();
while (iterator.hasNext()) {
ContextInstanceWrapper item = iterator.next();
if (!item.checkValid()) {
iterator.remove();
}
}
if (writeLock != null) {
writeLock.unlock();
}
}
/**
* 检测是否包含指定的 Activity
* @param clazzs Class(Activity)[]
* @return {@code true} yes, {@code false} no
*/
public boolean existActivitys(final Class<?>... clazzs) {
if (clazzs != null && clazzs.length != 0) {
synchronized (mActivityStacks) {
// 保存新的堆栈, 防止出现同步问题
Stack<Activity> stack = new Stack<>();
stack.addAll(mActivityStacks);
try {
// 进行遍历判断
Iterator<Activity> iterator = stack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
if (activity != null && !activity.isFinishing()) {
for (int i = 0, len = clazzs.length; i < len; i++) {
if (clazzs[i] != null && activity.getClass().getName().equals(clazzs[i].getName())) {
return true;
}
}
}
}
} finally {
// 移除数据, 并且清空内存
stack.clear();
stack = null;
}
}
}
return false;
}
/**
* 关闭指定类名 Activity
* @param clazz Activity.class
* @return {@link ActivityUtils}
*/
public ActivityUtils finishActivity(final Class<?> clazz) {
if (clazz != null) {
synchronized (mActivityStacks) {
// 保存新的堆栈, 防止出现同步问题
Stack<Activity> stack = new Stack<>();
stack.addAll(mActivityStacks);
// 清空全部, 便于后续操作处理
mActivityStacks.clear();
// 进行遍历移除
Iterator<Activity> iterator = stack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
// 判断是否想要关闭的 Activity
if (activity != null) {
if (activity.getClass() == clazz) {
// 如果 Activity 没有 finish 则进行 finish
if (!activity.isFinishing()) {
activity.finish();
}
// 删除对应的 Item
iterator.remove();
}
} else {
// 删除对应的 Item
iterator.remove();
}
}
// 把不符合条件的保存回去
mActivityStacks.addAll(stack);
// 移除数据, 并且清空内存
stack.clear();
stack = null;
}
}
return this;
}
/**
* 结束全部 Activity 除忽略的 Activity 外
* @param clazz Activity.class
* @return {@link ActivityUtils}
*/
public ActivityUtils finishAllActivityToIgnore(final Class<?> clazz) {
if (clazz != null) {
synchronized (mActivityStacks) {
// 保存新的堆栈, 防止出现同步问题
Stack<Activity> stack = new Stack<>();
stack.addAll(mActivityStacks);
// 清空全部, 便于后续操作处理
mActivityStacks.clear();
// 进行遍历移除
Iterator<Activity> iterator = stack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
// 判断是否想要关闭的 Activity
if (activity != null) {
if (!(activity.getClass() == clazz)) {
// 如果 Activity 没有 finish 则进行 finish
if (!activity.isFinishing()) {
activity.finish();
}
// 删除对应的 Item
iterator.remove();
}
} else {
// 删除对应的 Item
iterator.remove();
}
}
// 把不符合条件的保存回去
mActivityStacks.addAll(stack);
// 移除数据, 并且清空内存
stack.clear();
stack = null;
}
}
return this;
}
private void saySubtargets() {
final List<File> soundFiles = new ArrayList<>();
soundFiles.add(new File("sounds/voice/shootoff-shoot.wav"));
final Stack<Integer> temp = new Stack<>();
temp.addAll(currentSubtargets);
Collections.reverse(temp);
final Iterator<Integer> it = temp.iterator();
while (it.hasNext()) {
final Integer index = it.next();
if (!it.hasNext() && currentSubtargets.size() > 1)
soundFiles.add(new File("sounds/voice/shootoff-and.wav"));
final File targetNameSound = new File(String.format("sounds/voice/shootoff-%s.wav", subtargets.get(index)));
if (targetNameSound.exists()) {
soundFiles.add(targetNameSound);
} else {
// We don't have a voice actor sounds file for a target
// subregion, fall back
// to TTS
saySubtargetsTTS();
return;
}
}
super.playSounds(soundFiles);
}
/**
* Helper routine to copy stacks which need to be maintained for linking
* in solutions.
*
* @param existing stack to be copied.
*/
private static Stack<IMove> stackCopy(Stack<IMove> existing) {
Stack<IMove> aCopy = new Stack<IMove>();
for (Iterator<IMove> it = existing.iterator(); it.hasNext(); ) {
aCopy.push(it.next());
}
return aCopy;
}
/**
* Helper routine to copy stacks which need to be maintained for linking
* in solutions.
*
* @param existing stack to be copied.
*/
private static Stack<IMove> stackCopy(Stack<IMove> existing) {
Stack<IMove> aCopy = new Stack<IMove>();
for (Iterator<IMove> it = existing.iterator(); it.hasNext(); ) {
aCopy.push(it.next());
}
return aCopy;
}
/**
* 结束多个类名 Activity
* @param clazzs Class(Activity)[]
* @return {@link ActivityUtils}
*/
public ActivityUtils finishActivity(final Class<?>... clazzs) {
if (clazzs != null && clazzs.length != 0) {
synchronized (mActivityStacks) {
// 保存新的堆栈, 防止出现同步问题
Stack<Activity> stack = new Stack<>();
stack.addAll(mActivityStacks);
// 清空全部, 便于后续操作处理
mActivityStacks.clear();
// 判断是否销毁
boolean isRemove;
// 进行遍历移除
Iterator<Activity> iterator = stack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
// 判断是否想要关闭的 Activity
if (activity != null) {
// 默认不需要销毁
isRemove = false;
// 循环判断
for (int i = 0, len = clazzs.length; i < len; i++) {
// 判断是否相同
if (activity.getClass() == clazzs[i]) {
isRemove = true;
break;
}
}
// 判断是否销毁
if (isRemove) {
// 如果 Activity 没有 finish 则进行 finish
if (!activity.isFinishing()) {
activity.finish();
}
// 删除对应的 Item
iterator.remove();
}
} else {
// 删除对应的 Item
iterator.remove();
}
}
// 把不符合条件的保存回去
mActivityStacks.addAll(stack);
// 移除数据, 并且清空内存
stack.clear();
stack = null;
}
}
return this;
}
/**
* 结束全部 Activity 除忽略的 Activity 外
* @param clazzs Class(Activity)[]
* @return {@link ActivityUtils}
*/
public ActivityUtils finishAllActivityToIgnore(final Class<?>... clazzs) {
if (clazzs != null && clazzs.length != 0) {
synchronized (mActivityStacks) {
// 保存新的堆栈, 防止出现同步问题
Stack<Activity> stack = new Stack<>();
stack.addAll(mActivityStacks);
// 清空全部, 便于后续操作处理
mActivityStacks.clear();
// 判断是否销毁
boolean isRemove;
// 进行遍历移除
Iterator<Activity> iterator = stack.iterator();
while (iterator.hasNext()) {
Activity activity = iterator.next();
// 判断是否想要关闭的 Activity
if (activity != null) {
// 默认需要销毁
isRemove = true;
// 循环判断
for (int i = 0, len = clazzs.length; i < len; i++) {
// 判断是否相同
if (activity.getClass() == clazzs[i]) {
isRemove = false;
break;
}
}
// 判断是否销毁
if (isRemove) {
// 如果 Activity 没有 finish 则进行 finish
if (!activity.isFinishing()) {
activity.finish();
}
// 删除对应的 Item
iterator.remove();
}
} else {
// 删除对应的 Item
iterator.remove();
}
}
// 把不符合条件的保存回去
mActivityStacks.addAll(stack);
// 移除数据, 并且清空内存
stack.clear();
stack = null;
}
}
return this;
}