ActivityQueueManager 自己管理的activity队列
来源:互联网 发布:淘宝店如何卖网游装备 编辑:程序博客网 时间:2024/05/21 09:37
ActivityQueueManager
当我们写一个android项目时,很多时候我们都想自己管理我们的activity队列,比如当我们开启新的activity时就加人到队列,当我们finish时就从队列中删除。这样还有一个很明显的好处就是,当我们退出应用时直接遍历这个队列把其中加人的activity挨个finish掉即可。
这里我们需要提供出来的方法:
- 添加一个activity(pushActivity)
- 删除一个activity(popActivity)
- 获取队列中最上层activity(pop)
- 获取队列中的某一个activity(popIndex)
- 删除掉队列中所有的activity,退出应用使用(finishAllActivity)
- 关闭掉队列中的最上层的N个activity,很多应用需要的一个方法(closeNumberActivities)
public class ActivityQueueManager {
private static final ActivityQueueManager mInstance = new ActivityQueueManager();
private final static String TAG = ActivityQueueManager.class.getSimpleName();
private static LinkedList<Activity> mQueue;
private ActivityQueueManager() {
ActivityQueueManager.mQueue = new LinkedList<Activity>();
}
/**
* push activity to queue
*
* @param activity
* @return void
* @throws
*/
public void pushActivity(Activity activity) {
mInstance.doPushActivity(activity);
Log.v(TAG, "pushActivity size=" + mQueue.size() + " name=" + activity.getLocalClassName());
}
/**
* pop activity from queue
*
* @param activity
* @return void
* @throws
*/
public void popActivity(Activity activity) {
mInstance.doPopActivity(activity);
Log.v(TAG, "popActivity size=" + mQueue.size() + " name=" + activity.getLocalClassName());
}
/**
* pop the stack top activity
*
* @return Activity
* @throws
*/
public Activity pop() {
if (mQueue != null && mQueue.size() > 0) {
return mQueue.peek();
} else {
return null;
}
}
/**
* pop the postion activity
*
* @return Activity
* @throws
*/
public Activity popIndex(int postion) {
if (mQueue != null && mQueue.size() > postion) {
return mQueue.get(postion);
} else {
return null;
}
}
/**
* finish all activity from queue
*
* @return void
* @throws
*/
public void finishAllActivity() {
mInstance.doFinishAll();
}
@SuppressLint("NewApi")
public void doPushActivity(Activity activity) {
// 解决系统2.2版本的bug
if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) {
mQueue.push(activity);
} else {
mQueue.addFirst(activity);
}
}
public void doPopActivity(Activity activity) {
if (ActivityQueueManager.mQueue.contains(activity)) {
ActivityQueueManager.mQueue.remove(activity);
}
}
public void doFinishAll() {
Iterator<Activity> it = mQueue.iterator();
while (it.hasNext()) {
Activity a = it.next();
it.remove();
a.finish();
}
}
public static ActivityQueueManager getInstance() {
return mInstance;
}
public LinkedList<Activity> getActivityLinkQueue() {
return mQueue;
}
public int getSize() {
return mQueue.size();
}
/**
* 关闭N个activities
* @param closeNumberActivities 关闭activity的个数
*/
public void closeNumberActivities(int closeNumberActivities) {
// 关闭个数小于1的时候直接跳出
if (closeNumberActivities <= 0) {
return;
}
LinkedList<Activity> mActivities = mQueue;
if (mActivities != null && mActivities.size() <= 1) {
return;
}
try {
int countTemp = 0;
// 倒序遍历acitivty
for (int i = mActivities.size() - 1; i >= 0; i--) {
// 如果当前页面为NativeAppActivity,则直接finish();
Activity mActivity = mActivities.get(i);
if (mActivity != null ) {
mActivity.finish();
mActivities.remove(mActivity);
}
// 其他情况下finish掉activity
else {
// 当前页面不能是最后一页
if (mActivities.size() > 1 ) {
mActivity.finish();
mActivities.remove(mActivity);
countTemp ++;
} else {
i = -1;
}
}
// 退出循环
if (countTemp == closeNumberActivities) {
i = -1;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
下面就是调用过程了。只要我们在activity的onCreate方法中调用pushActivity添加,在onDestroy中调用popActivity移除即可。当然我们不会再每一个activity中都去做这个操作。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (LoveApplication) getApplication();
//添加
ActivityQueueManager.getInstance().pushActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//移除
ActivityQueueManager.getInstance().popActivity(this);
}
其实我觉得这个框架的好处是:可以找到某个学要关闭的Activity将finish
0 0
- ActivityQueueManager 自己管理的activity队列
- Android 管理自己的Activity
- 新建自己的Activity
- Android自己管理Activity和Service
- 通过StackManager对Android应用的Activity进行自己管理的工具类
- 管理Activity的实例
- 管理Activity的生命周期
- android的Activity管理
- 管理Activity的生命周期
- Activity的生命周期管理
- 管理Activity的生命周期
- 管理Activity的生命周期
- 管理activity的生命周期
- activity的生命周期管理。
- 全局的activity管理
- android的Activity管理
- 管理Activity的生命周期
- 管理Activity的生命周期
- 相对基址加变址寻址方式
- Activity传值到另一个Actiivity中的Fragment中
- 细说JVM系列:JVM存在的目的和意义是什么?
- float:left和display:inline的区别
- 记录学生时代到可能会到来的灿烂
- ActivityQueueManager 自己管理的activity队列
- I.MX6 u-boot.imx中IVT、DCD等头部数据的生成
- HIHO #1295 : 数论二·Eular质数筛法
- 过拟合的解决方法2
- 使用Myelipse编写hibernate遇到的各种问题
- 32位地址的寻址方式
- 在VS中运行带有参数的控制台程序
- udev 规则文件介绍
- Python的学习中细节的整理(3):raw_input