UncaughtExceptionHandler 使用遇到的问题

Android应用保存log使用UncaughtExceptionHandler

UncaughtExceptionHandler,这个文件能够在应用发生异常的时候,把相应的log保存到你指定的文件中,
不需要看那logcat中长长的log,准确快速的定位到问题.至于这个文件怎么写,可以上午去查找.

使用它的时候,我遇到了下面的问题:
在应用程序出现异常的时候,程序不会退出,而是退到前面几个界面,原来保有的数据也因为

android.os.Process.killProcess(android.os.Process.myPid())

这个原因,数据都没有保存,但是现在退到的这个界面,需要之前的数据,所以现在还不如直接终止程序,
让用户再次点击程序开始.
基于这个问题,我想让程序出现问题后,保存日志,然后直接退出.
通过上网找资料,有如下方案可用:


  • 用ActivityManager单列作为管理Activity,让每个界面入口都添加,然后在出现问题的时候,再把所有的界面通过它来关闭.它需要实现BaseActivity.java,然后每个界面来继承它,在抓取log后调用它
  • 用Application单利来管理它,方法和上述的ActivityManager一样,可是这个就可以实现关闭应用的功能.
ActivitityManager.java

public class ActivityManager {
    private ActivityManager() {

    }

    private Stack<Activity> mStack = new Stack<>();

    private static class Holder {
        private static ActivityManager mInstance = new ActivityManager();
    }

    public static ActivityManager getInstance() {
        return Holder.mInstance;
    }

    public void addActivity(Activity activity) {
        if (!mStack.contains(activity)) {
            mStack.add(activity);
        }
    }

    public void finishActivity(Activity activity) {
        if (mStack.contains(activity)) {
            mStack.remove(activity);
            activity.finish();
        }
    }

    public void finishActivity(Class<?> cls) {
        for (Activity activity : mStack) {
            if (activity.getClass().equals(cls)) {
                mStack.remove(activity);
                activity.finish();
            }
        }
    }

    public void finishAllActivitys() {
        int size = mStack.size();
        JftLogUtil.log("finishAllActivitys size = " + size);
        for (Activity activity : mStack) {
            mStack.remove(activity);
            activity.finish();
        }
//        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
    }

}
JftApplication.java
public class JftApplication extends Application {
    private JunPayUtils mJunPayUtils;
    private JunPayInfo mJunPayInfo;
    private List<Activity> mActivities;

    public JftApplication() {
        super();
        mActivities = new ArrayList<>();
        mJunPayUtils = new JunPayUtils();
        mJunPayInfo = new JunPayInfo();
    }

    private static class Holder {
        static JftApplication mInstance = new JftApplication();
    }

    public static JftApplication getInstance() {
        return Holder.mInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        JFTExceptionHandler.getInstance().init(getApplicationContext());
    }

    public JunPayUtils getJunPayUtils() {
        return mJunPayUtils;
    }

    public JunPayInfo getJunPayInfo() {
        return mJunPayInfo;
    }

    public void addActivity(Activity activity) {
        mActivities.add(activity);
    }

    public void exit() {
        for (Activity activity : mActivities) {
            activity.finish();
        }
        System.exit(0);
    }
}

加油!以后多多加油!多多写博客!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值