android异常处理:未处理异常->线程退出->检查异常->处理

本文深入探讨了Android系统中线程未捕获异常处理机制,包括dvmDetachCurrentThread、dvmCheckException等核心方法的作用及流程。通过分析源码,详细解释了如何通过ActivityManager处理应用程序崩溃并生成错误报告。

dvmDetachCurrentThread

dvmCheckException

threadExitUncaughtException

Thread.uncaughtHandler.uncaughtException/ThreadGroup.uncaughtException


Thread.defaultUncaughtHandler

private static class UncaughtHandler implements Thread.UncaughtExceptionHandler {
        public void uncaughtException(Thread t, Throwable e) {
            try {
                // Don't re-enter -- avoid infinite loops if crash-reporting crashes.
                if (mCrashing) return;
                mCrashing = true;

                if (mApplicationObject == null) {
                    Slog.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());
                    Slog.e(TAG, message.toString(), e);
                }

                // Bring up crash dialog, wait for it to be dismissed
                ActivityManagerNative.getDefault().handleApplicationCrash(
                        mApplicationObject, new ApplicationErrorReport.CrashInfo(e));
            } catch (Throwable t2) {
                try {
                    Slog.e(TAG, "Error reporting crash", t2);
                } catch (Throwable t3) {
                    // Even Slog.e() fails!  Oh well.
                }
            } finally {
                // Try everything to make sure this process goes away.
                Process.killProcess(Process.myPid());
                System.exit(10);
            }
        }
    }
07-21 20:07:15.157 5376 5376 D SourceMng_Manager_20200401: SrcMngAudioSwitchManager abandonAdayoAudioFocus() sourceType = ADAYO_SOURCE_MEDIA id = com.adayo.proxy.infrastructure.sourcemng.Control.SrcMngAudioSwitchManager@f592723com.adayo.medialibrary.util.DeviceServiceProxy$2@af48420 行 339179: 07-21 20:07:15.158 5376 5376 D SourceMng_Manager_20200401: SrcMngAudioSwitchManager abandonAdayoAudioFocus() end abandonRlt = 1 行 339181: 07-21 20:07:15.159 5376 5376 D MediaLibrary<2507201054> VideoPlaybackService: (VideoPlaybackService.java:35)#SetVideoPlaying pre-> [VideoPreviewActivity.java:406#onPause] info->: setVideoPlaying isPlaying false 行 339183: 07-21 20:07:15.159 5376 5376 I am_on_paused_called: [0,com.adayo.medialibrary.ui.VideoPreviewActivity,performPause] 行 339301: 07-21 20:07:15.187 5376 5376 I Adayo-Mvvm-BaseActivity: com.haibing.mvvm.bases.ui.BaseActivity==>onWindowFocusChanged(BaseActivity.java:125): class com.adayo.medialibrary.ui.VideoPreviewActivity==>onWindowFocusChanged hasFocus = false 行 339302: 07-21 20:07:15.188 5376 5376 D MediaLibrary<2507201054> VideoPreviewActivity: (VideoPreviewActivity.java:1580)#OnWindowFocusChanged pre-> [WindowCallbackWrapper.java:125#onWindowFocusChanged] info->: onWindowFocusChanged: hasFocus false 行 342275: 07-21 20:07:17.379 5376 5376 D IJKMEDIA: IjkMediaPlayer_setVideoSurface 行 342276: 07-21 20:07:17.379 5376 5376 D IJKMEDIA: ijkmp_set_android_surface(surface=0x0) 行 342277: 07-21 20:07:17.379 5376 5376 D IJKMEDIA: ffpipeline_set_surface() 行 342278: 07-21 20:07:17.379 5376 5376 D IJKMEDIA: ijkmp_set_android_surface(surface=0x0)=void 行 342311: 07-21 20:07:17.421 5376 5376 D ConnectivityManager: StackLog: [android.net.ConnectivityManager.unregisterNetworkCallback(ConnectivityManager.java:4029)] [com.bumptech.glide.manager.SingletonConnectivityReceiver$FrameworkConnectivityMonitorPostApi24.unregister(SingletonConnectivityReceiver.java:205)] [com.bumptech.glide.manager.SingletonConnectivityReceiver.maybeUnregisterReceiver(SingletonConnectivityReceiver.java:122)] [com.bumptech.glide.manager.SingletonConnectivityReceiver.unregister(SingletonConnectivityReceiver.java:105)] [com.bumptech.glide.manager.DefaultConnectivityMonitor.unregister(DefaultConnectivityMonitor.java:29)] [com.bumptech.glide.manager.DefaultConnectivityMonitor.onStop(DefaultConnectivityMonitor.java:39)] [com.bumptech.glide.manager.LifecycleLifecycle.onStop(LifecycleLifecycle.java:35)] [java.lang.reflect.Method.invoke(Native Method)] [androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:225)] [androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:199)] [androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:190)] [androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:40)] [androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:360)] [androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.java:290)] [androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:308)] [androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:151)] [androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)] [androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:68)] [androidx.lifecycle.ReportFragment$LifecycleCallbacks.onActivityPreStopped(ReportFragment.java:210)] [android.app.Activity.dispatchActivityPreStopped(Activity.java:1328)] [android.app.Activity.performStop(Activity.java:8033)] [android.app.ActivityThread.callActivity ... 行 342322: 07-21 20:07:17.424 5376 5376 I Adayo-Mvvm-BaseActivity: com.haibing.mvvm.bases.ui.BaseActivity==>onStop(BaseActivity.java:98): class com.adayo.medialibrary.ui.VideoPreviewActivity==>onStop 行 342323: 07-21 20:07:17.424 5376 5376 I am_on_stop_called: [0,com.adayo.medialibrary.ui.VideoPreviewActivity,STOP_ACTIVITY_ITEM] 行 342324: 07-21 20:07:17.424 5376 5376 D MediaLibrary<2507201054> VideoPreviewActivity: (VideoPreviewActivity.java:746)#OnSaveInstanceState pre-> [Activity.java:2048#performSaveInstanceState] info->: onSaveInstanceState() 行 342325: 07-21 20:07:17.424 5376 5376 D MediaLibrary<2507201054> VideoPreviewActivity.java: (VideoPreviewActivity.java:1548)#SaveLastPlayPosition pre-> [VideoPreviewActivity.java:753#onSaveInstanceState] info->: saveLastPlayPosition sCurrentVideoPath /storage/8C3C-7AC3/视频符号名称/MP4/那些你很冒险的梦-art--林俊杰--art-4ddd1cebd2065ed97b08c8bb84036768.mp4, sCurrentSeekPosition 67303 行 342326: 07-21 20:07:17.425 5376 5376 I MediaLibrary<2507201054> VideoPreviewActivity: (VideoPreviewActivity.java:755)#OnSaveInstanceState pre-> [Activity.java:2048#performSaveInstanceState] info->: onSaveInstanceState mCurrentPosition:9 sCurrentSeekPosition:67303 行 342329: 07-21 20:07:17.426 5376 5376 I MediaLibrary<2507201054> VideoPreviewActivity: (VideoPreviewActivity.java:756)#OnSaveInstanceState pre-> [Activity.java:2048#performSaveInstanceState] info->: onSaveInstanceState: playState = 5 行 344098: 07-21 20:07:18.971 5376 5376 I Adayo-Mvvm-BaseActivity: com.haibing.mvvm.bases.ui.BaseActivity==>onRestart(BaseActivity.java:79): class com.adayo.medialibrary.ui.VideoPreviewActivity==>onRestart 行 344099: 07-21 20:07:18.971 5376 5376 I am_on_restart_called: [0,com.adayo.medialibrary.ui.VideoPreviewActivity,performRestartActivity] 行 344107: 07-21 20:07:18.992 5376 5376 I Adayo-Mvvm-BaseActivity: com.haibing.mvvm.bases.ui.BaseActivity==>onStart(BaseActivity.java:73): class com.adayo.medialibrary.ui.VideoPreviewActivity==>onStart 行 344108: 07-21 20:07:18.992 5376 5376 I am_on_start_called: [0,com.adayo.medialibrary.ui.VideoPreviewActivity,handleStartActivity]
08-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值