工具类-ActivityStack
来源:互联网 发布:矩阵计算中文第四版pdf 编辑:程序博客网 时间:2024/06/02 02:04
感觉ActivityStack没啥可以讲的主要目的就是将activity存入一个自己定义的栈中再根据自己的需要处理activity中的信息
代码如下
public class ActivityStack { private final static String TAG = "ActivityHolder"; private List<FragmentActivity> activityList = new ArrayList<FragmentActivity>(); ; private static ActivityStack instance; private ActivityStack() { } public static synchronized ActivityStack getInstance() { if (instance == null) { instance = new ActivityStack(); } return instance; } /** * add the activity in to a list end * * @param activity */ public void addActivity(FragmentActivity activity) { try { if (activity != null && activityList != null) { int size = activityList.size(); if (checkActivityIsVasivle(activity)) { removeActivity(activity); activityList.add(activityList.size(), activity); } else { activityList.add(activity); } size = activityList.size(); for (int i = 0; i < size; i++) { LogUtils.i("addActivity ==[" + i + "]" + " " + activityList.get(i)); } } } catch (Exception e) { // TODO: handle exception } } /** * 获取当前Activity(堆栈中最后一个压入的) */ public Activity currentActivity() { Activity activity = activityList.get(0); return activity; } /** * 结束当前Activity(堆栈中最后一个压入的) */ public void finishCurActivity() { Activity activity = currentActivity(); activityList.remove(0); activity.finish(); } /** * finish all the activity in the list. * <p/> * <p/> * the activity calling this method hold the context */ public void finishAllActivity() { if (activityList != null) { int size = activityList.size(); for (int i = size - 1; i >= 0; i--) { FragmentActivity activity = activityList.get(i); if (activity != null) { activity.finish(); } LogUtils.i("finishAllActivity ==[" + i + "]" + " " + activity); activityList.remove(activity); // activityList.clear(); } } } /** * finish all the activity in the list. * <p/> * <p/> * the activity calling this method hold the context */ public void finishOtherActivity(FragmentActivity activityCurrent) { if (activityList != null) { int size = activityList.size(); for (int i = size - 1; i >= 0; i--) { FragmentActivity activity = activityList.get(i); if (activity != null && activity != activityCurrent) { if (activity != null) { activity.finish(); } LogUtils.i("finishAllActivity ==[" + i + "]" + " " + activity); activityList.remove(activity); } } } } /** * remove the finished activity in the list. * * @param activity the activity is removed from activityList */ public void removeActivity(FragmentActivity activity) { try { if (activityList != null) { activityList.remove(activity); LogUtils.i("removeActivity==" + " " + activity + "activityList.size===" + activityList.size()); } } catch (Exception e) { LogUtils.e("removeActivity" + e.getMessage()); } } public void pop(Class<? extends FragmentActivity> activity) { for (Activity a : activityList) { LogUtils.i(a.getClass().getName() + "--->" + activity.getName()); if (a.getClass().getName().equals(activity.getName())) { if (!a.isFinishing()) { a.finish(); } } } activityList.remove(activity); } public boolean checkActivityIsVasivle(FragmentActivity activity) { LogUtils.i(" " + activityList.contains(activity)); return activityList.contains(activity); } /** * <p> * 功能 干掉除home外的所有activity * </p> * * @author sss 时间 2013年12月11日 上午5:38:59 */ public void finishWorkActivity() { Activity act = null; for (int index = 0; index < activityList.size(); index++) { act = activityList.remove(index); if (act == null) { continue; } // if(act.getClass()==HomeActivity.class){ // continue; // } act.finish(); } } public static boolean isTopActivity(FragmentActivity activity) { boolean isTop = false; ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); ComponentName cn = am.getRunningTasks(1).get(0).topActivity; if (cn.getClassName().contains(activity.getClass().getSimpleName())) { isTop = true; } return isTop; }}
与之关联的还有一个处理app异常的类代码如下
public class AppException extends Exception implements UncaughtExceptionHandler { private static final long serialVersionUID = -6262909398048670705L; private String message; private Thread.UncaughtExceptionHandler mDefaultHandler; private AppException() { super(); this.mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); } public AppException(String message, Exception excp) { super(message, excp); this.mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } /** * 获取APP异常崩溃处理对象 * * @return */ public static AppException getAppExceptionHandler() { return new AppException(); } @Override public void uncaughtException(Thread thread, Throwable ex) { if (!handleException(ex) && mDefaultHandler != null) { Log.e("=uncaughtException=","uncaughtException"); if (InnoFarmApplication.getAppContext()!=null){ TCAgent.onError(InnoFarmApplication.getAppContext(), ex); } mDefaultHandler.uncaughtException(thread, ex); } } /** * 自定义异常处理 * * @param ex * @return true:处理了该异常信息;否则返回false */ private boolean handleException(Throwable ex) { if (ex == null) { return false; } final String errLog = ex.toString(); final Activity activity = ActivityStack.getInstance().currentActivity(); if (activity == null) { return false; } new Thread() { @Override public void run() { Looper.prepare(); new AlertDialog.Builder(activity).setTitle("提示") .setCancelable(false).setMessage(errLog) .setNeutralButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { AppManager.getAppManager().finishAllActivity(); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); } }).create().show(); Looper.loop(); } }.start(); return true; }}
这样的话我们就能判断异常位置我们的BaseActivity是这样处理的
public abstract class BaseActivity extends FragmentActivity { // 管理所有打开的activity // static 和对象没有关系 和类有关系 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Thread.setDefaultUncaughtExceptionHandler(AppException.getAppExceptionHandler()); init(); initView(); ActivityStack.getInstance().addActivity(this); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onDestroy() { super.onDestroy(); ActivityStack.getInstance().removeActivity(this); } /** * 初始化 */ protected abstract void init(); /** * 初始化view界面 */ protected abstract void initView() ;}
0 0
- 工具类-ActivityStack
- ActivityStack类startActivityLocked方法解析
- ActivityStack 详解
- ActivityRecord、TaskRecord、ActivityStack
- ActivityRecord、TaskRecord、ActivityStack
- Android Tasks、ActivityStack和Activity
- TaskRecord ActivityRecord ActivityStack之间的关系
- TaskRecord、ActivityRecord 和 ActivityStack的关系
- 工具类
- 工具类!!!!
- 工具类
- 工具类
- 工具类
- 工具类
- 工具类
- 工具类
- 工具类
- 工具类
- SQL Server2016 新功能之SQL安装篇
- 白话经典算法系列之一 冒泡排序的三种实现
- 栈,堆,队列
- 沉浸式状态栏
- python绘图 初识Python绘图
- 工具类-ActivityStack
- mymps蚂蚁分类系统5.8E UTF8 开源版 新功能详细介绍
- zookeeper原理(转)
- 集成点:网关、隧道及中继
- SVM支持向量机原理(二) 线性支持向量机的软间隔最大化模型
- python 数据分析环境安装
- wordpress源码解析-数据库表结构(2)
- vijos1144守皇宫43分求指点
- 结构化查询(Query DSL)和结构化过滤(Filter DSL)