Android 应用崩溃恢复原理+Recovery恢复框架

Android 应用崩溃恢复原理+Recovery恢复框架

1、Android crash处理

这里所说的crash是因为程序内部原因造成的崩溃,并不是系统内存不足等原因。

通用的实现方案,是使用自定义的CrashHandler类,实现 Thread.UncaughtExceptionHandler接口。覆盖系统原本的ExceptionHandler。

public void init(Context context) {
        mContext = context;
        // 获取系统默认的UncaughtException处理器
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        // 设置该CrashHandler为程序的默认处理器
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

此处的 this 则是自定义的
public class MyCrashHandler implements Thread.UncaughtExceptionHandler

在发生崩溃的时候 系统会调用 uncaughtException
/**
     * 当UncaughtException发生时会转入该函数来处理
     *
     * @param thread
     * @param ex
     */
    @Override
    public void uncaughtException(Thread thread, Throwable ex) {

        if (!dealNtesUncaughtException(thread, ex)) {
            dealDefaultUncaughtException(thread, ex);
        } else {
            try {
                Thread.sleep(5 * 1000);
                dealDefaultUncaughtException(thread, ex);
            } catch (InterruptedException e) {
            }
        }

    }



2、私有Activity 栈的维护

1-为什么要维护应用自身的Activity栈?
这样可以判断出crash的Activity,也可以在崩溃后恢复到相应页面。

如果只是恢复栈顶Activity,当用户在这个界面不进行跳转操作而是直接按返回键,这将导致直接退出程序,所以对于这个情况应该是回退到应用的主页

Activity的调用栈可以自己维护,也可以通过在Application里调用registerActivityLifecycleCallbacks()进行注册,监听Activity的创建和销毁,自己维护一个Activity的栈。

代码的详细逻辑请参考: http://www.jianshu.com/p/6b31033640a1

3、ActivityStack的恢复

还没写完。。。哈哈哈

你可能感兴趣的:(Android,应用开发,java)