你知道Android为什么会Crash吗?

目录

前言

每一个Android开发同学在项目开发过程中肯定都遇到过各式各样的Crash问题,大家都非常不希望程序发生Crash。那么问题来了,你真的了解Crash吗?

Android为什么会发生Crash

最近在思考一个问题,为什么Android程序发生空指针等异常时,会导致应用会崩溃,进程结束。而java web程序发生这些异常,只要有其他线程还在运行,虚拟机就不会关闭,进程也不会结束

我在App中模拟了一个数组越界异常,Android系统会帮我们打印异常日志

主线程异常

子线程异常

每当异常发生的时候,我们往往都会通过查看日志来解决。那么我们是不是可以通过查看打印异常日志的代码,来找到Android系统是如何抛出这些未捕获的异常,以及Android在出现未捕获异常的时候为什么会发生Crash

我们找到了com.android.internal.os.RuntimeInit类,这里我们仅贴出我们需要的代码

public class RuntimeInit {
    final static String TAG = "AndroidRuntime";
  
    ....
      
    private static class LoggingHandler implements Thread.UncaughtExceptionHandler {
        public volatile boolean mTriggered = false;

        @Override
        public void uncaughtException(Thread t, Throwable e) {
            mTriggered = true;

            if (mCrashing) return;
                //打印异常日志
            if (mApplicationObject == null && (Process.SYSTEM_UID == Process.myUid())) {
                Clog_e(TAG, "*** FATAL EXCEPTION IN SYSTEM PROCESS: " + t.getName(), e);
            } else {
                StringBuilder message = new StringBuilder();
                message.append("FATAL EXCEPTION: ").append(t.getName()).append("\n");
                final String processName = ActivityThread.currentProcessName();
                if (processName != null) {
                    message.append("Process: ").append(processName).append(", ");
                }
                message.append("PID: ").append(Process.myPid());
                Clog_e(TAG, message.toString(), e);
            }
        }
    }

    private static class KillApplicationHandler implements Thread.UncaughtExceptionHandler {
        private final LoggingHandler mLoggingHandler;
        public KillApplicationHandler(LoggingHandler loggingHandler) {
            this.mLoggingHandler = Objects
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值