android捕获程序异常退出

android 程序全局自动捕获异常 专制系统奔溃,异常退出无法找到原因的问题 (一) 前言 各位亲爱的午饭童鞋,是不是经常因为自己的程序中出现未层捕获的异常导致程序异常终止而痛苦不已?嗯,是的。。 但是,大家不要怕,今天给大家分享一个东东可以解决大家这种困扰,吼吼! (二) UncaughtExceptionHandler接口 这个接口,顾名思义,就是处理程序中没有处理的异常,而且是在系统抛出异常导致程序异常终止之前哦!那么,在Android里面怎么使用呢? 阅读详情

今天看到迅雷动漫里面一个CrashHandler 的类,我猜是崩溃处理类。进去一看,果然。顺便学习一下。

Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可。


代码:

public class CrashHandler implements UncaughtExceptionHandler {
    private static final Logger LOG = Logger.getLogger(CrashHandler.class);

    private final Application mApplication;
    private Handler mUIHandler;
    private Thread mUiThread;

    public CrashHandler(Application app) {
        mApplication = app;
        mUIHandler = new Handler();
        mUiThread = Thread.currentThread();
    }

    @Override
    public void uncaughtException(Thread thread, Throwable e) {
        LOG.error(e);
        Throwable cause = e.getCause();
        while (cause != null) {
            LOG.error(cause);
            cause = cause.getCause();
        }

        writeCrashInfoToFile(e);

        if (Thread.currentThread() != mUiThread) {
            mUIHandler.post(new Runnable() {

                @Override
                public void run() {
                    mApplication.onTerminate();
                }
            });
        } else {
            mApplication.onTerminate();
        }
    }

    private void writeCrashInfoToFile(Throwable t) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        t.printStackTrace(pw);
        Throwable cause = t.getCause();
        while (cause != null) {
            cause.printStackTrace(pw);
            cause = cause.getCause();
        }
        String crashInfo = sw.toString();
        pw.close();

        try {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                File file = mApplication.getApplicationContext().getExternalCacheDir();
                if (file != null) {
                    file = FileUtils.getFile(file, "crash");
                    file.mkdirs();
                    FileUtils.writeStringToFile(FileUtils.getFile(file, "crash.log"), crashInfo);
                }
            }
        } catch (IOException e) {
            LOG.warn(e);
        }
    }
}
两个可以看的参考:

http://blog.youkuaiyun.com/hehe9737/article/details/7662123

http://blog.youkuaiyun.com/wangbole/article/details/8161524

代码是自己的,虽然简单,算我是原创吧。不然,真的很难装逼。哭

Android代码-CrashMonitor 监听程序崩溃日志 MNCrashMonitor MNCrashMonitor 监听程序崩溃日志,直接页面展示崩溃日志列表,调试方便,测试人员可以随时给程序猿查看日志详情,可以动态添加日志内容,手机直接查看日志内容可以分享,复制,生成长截图,高亮显示。 截图 如何添加 Gradle添加: 1.在Project的build.gradle中添加仓库地址 allprojects { repositories { ... maven { url "https://jitpack.io" } } } 2.在app目录下的build.gradle中添加依赖 dependencies { (support 包版本随意) compile 'com.android.support:appcompat-v7:26.1.0' compile 'com.android.support:recyclerview-v7:26.1.0' compil 立即下载

相关推荐

监听打开/关闭APP

监听打开/关闭APP 在接收动作的位置添加你所想要做的事情

android异常退出检测,未捕获异常,现实程序崩溃闪退

碰到程序崩溃时,闪退效果,不会提示"xxx程序异常,退出程序"。这样的效果就要使用到未捕获异常来实现,这里记录了我的一个写法。其实原理很简单,设置程序的未捕获异常监听,实现监听的一个方法,在该方法中现实直接没有提示的退出程序。捕获异常工具类packagecom.tdh.http;importjava.io.PrintWriter;importjava.io.StringWriter;impo...

weixin_29369347的博客 981

qPCRtools | 神仙R包分分钟搞定你的qPCR实验结果!~

1写在前面 不知道大家都是怎么完成qPCR的计算的,在不会R的时候,我是用一个祖传的Excel表进行计算的。🤣 但是,一直有个缺点,如果需要计算的量比较大时,就不方便了,去搜了一下文献,发现了一个最近发表的R包,不仅可以计算反转录的RNA体积,还可以帮助选择定量方法,简直是神仙R包,本期就介绍一下它的使用吧。🥰 感谢原作者的开发,嘿嘿,文末有引用方法。👀 2用到的包 rm(list = ls())library(tidyverse)library(ggsci)library(qPCRtools)librar

m0_72224305的博客 3986

android 之进程异常终止监听并重启相关服务

当进程异常终止时,可以在进程的Application中设置异常终止的监听并重启相关服务。 Thread.setDefaultUncaughtExceptionHandler(this); @Override public void uncaughtException(Thread thread, Throwable throwable) { if(thread != null && "main".equals(thread.getName())) { ...

rosir_zhong的博客 1052

Matlab GUIDE -- 串口操作

1、首先新建-->应用程序-->GUIDE。 2、绘制一个简单的UI。 3、然后右击“打开串口”图标-->查看回调-->callback,即可打开此图标的回调函数,此回调函数是press button时执行(可按需要选择其他回调)。 4、在回调函数中添加打开串口的代码。 delete(instrfindall); %删除所有串口 s3 = serial('CO

Asgard-X 2837

cocos creator接入微信登陆sdk ios篇

cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id 在“info”标签栏的“LSApplicationQueriesSchemes“添加weixin 将SDK文件中...

凤小鹿的博客 6362

android异常捕获不退出程序,android捕获程序异常退出

今天看到迅雷动漫里面一个CrashHandler 的类,我猜是崩溃处理类。进去一看,果然。顺便学习一下。Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可。...

weixin_42562124的博客 553

告别交越失真:手把手教你设计高性能互补输出级电路(LTspice实测)

本文深入剖析音频放大器中常见的交越失真问题,并提供基于LTspice仿真的实战解决方案。通过对比二极管偏置、Vbe倍增器和集成运放驱动三种经典方案,手把手指导设计高性能互补输出级电路,涵盖原理分析、仿真验证及实物调试要点,助力消除音频失真,提升音质。

weixin_29190573的博客 552

安卓软件错误log_Android编程实现捕获程序异常退出时的错误log信息功能详解

本文实例讲述了Android编程实现捕获程序异常退出时的错误log信息功能。分享给大家供大家参考,具体如下:很多时候我们程序无缘无故的就挂掉了,让我们一头雾水,如果刚好我们在调试,那我们可以通过错误log来查看是什么原因引起的程序崩溃。但是当我们把程序发别人使用时,就没那么好运了,那我们要怎么样才能捕获到那个错误异常呢?还好Android给我们提供了UncaughtExceptionHandler...

weixin_39716160的博客 289

STC51单片机串口多字节数据接收的优化策略

本文深入探讨了STC51单片机串口多字节数据接收的优化策略。针对数据丢包、粘包等常见痛点,核心思路是采用“缓冲队列+定时器超时”模式,将实时处理转变为“先收纳,后处理”。文章详细讲解了硬件初始化、中断服务程序优化(快速入队与激活超时裁判)以及主循环的非阻塞设计,并进阶介绍了环形缓冲区实现与错误处理,旨在构建稳定可靠的串口通信系统。

weixin_29264201的博客 374

在blender中安装vtk插件

Blender 是一个开源的、功能强大的3D计算机图形软件,广泛用于创建动画片、视觉效果、艺术作品、3D打印模型、互动3D应用程序和视频游戏。Blender 是由 Blender 基金会开发和维护的,具有丰富的功能和灵活的扩展性。在github上下载zip插件。

如果想成为中心,那么就到中心去吧。 294

android异常捕获不退出程序,Android全局异常捕获,不退出应用,让应用正常运行下去!...

Android全局异常捕获,不退出应用,让应用正常运行下去!当App发现异常后,如果程序没有处理,将交给虚拟机进行处理,通常会弹出一个对话框,然后退出应用。但大多数的异常可能对后续流程影响不大,比如分享功能出现。一个问题,真的有必要关闭整个应用吗?屏蔽这个功能,对整体来说不会有太大的影响。或者某个页面的数据出现了逻辑错误,大多数关闭当 前页面, 用户再重新启动便可以正常使用了。原理介绍:Loope...

weixin_36467992的博客 1290

面向口齿不清者的语音识别新突破:用大模型拯救“听不懂”的声音

面向构音障碍患者的语音识别新突破:大语言模型显著提升识别准确率 国际语音研究团队在Interspeech 2025发表最新成果,通过将大语言模型(LLM)融入语音识别系统,显著改善了对构音障碍(dysarthria)患者语音的识别效果。研究表明: 传统语音识别(如CTC模型)对构音障碍语音的词错误率(WER)高达50-54%,Whisper模型降至38-40%。 引入LLM解码器后,BART模型将WER降至30-32%,而Whisper-Vicuna组合更将WER降低至21-26%。 关键优势:LLM能有效

帅小柏的博客 271

全局异常捕获中无限回到首页的问题

首先明确我的目标是希望异常后退出整个程序,而不是反复的回到首页 其中全局异常捕获类我已经上传,网上代码随便搜搜也很多,逻辑比较简单,在application的oncreate方法中加上 CrashHandler crashHandler = CrashHandler.getInstance() ; crashHandler.init(this,this) ; 这两句代码就可以了 主要

小太阳的专栏 653

10分钟搞定manim安装与vscode配置

manim安装与vscode配置

帅帅de三叔 3413

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android在程序崩溃捕获异常后记录log并退出

CashHandler public class CrashHandler implements Thread.UncaughtExceptionHandler { private static CrashHandler sInstance = null; private Thread.UncaughtExceptionHandler mDefaultHandler; ...

小点滴 1216

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android捕获异常并且安全退出程序

public class CrashHandler implements Thread.UncaughtExceptionHandler { private final String TAG = "CrashHandler"; //系统默认的UncaughtException处理类 private Thread.UncaughtExceptionHandle

qq_28674511的博客 934

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android 当出现未捕获异常的时候,彻底退出应用程序

应用程序中会出现未能捕获异常的时候,应用程序会出现崩溃的现象。 一、构建方法CrashHandler,用于监听未捕获异常的线程。 package com.rzt.repair.exception; import java.io.File; import java.io.FileOutputStream; import java.io.PrintWriter; import java.io.St

亦然莹儿的博客 3763

Android捕获程序异常退出时的错误log信息

很多时候我们程序无缘无故的就挂掉了,让我们一头雾水,如果刚好我们在调试,那我们可以通过错误log来查看是什么原因引起的程序崩溃。但是当我们把程序发别人使用时,就没那么好运了,那我们要怎么样才能捕获到那个错误异常呢?还好android给我们提供了UncaughtExceptionHandler 这个类,我们可以通过实现这个类的接口,来全局捕获那个让程序崩掉的错误log信息。可以将错误的log保存在本地

张小强的专栏 3558

Android 通过Application捕获全局异常,防止程序崩溃退出

因为要对全局进行一个“监听”,因此我们可以把一个监听异常的方法放在Applcation中,而它的生命周期也就是整个app的生命周期。 我们写一个类实现UncaughtExceptionHandler接口,这个接口是为了捕获没有被捕获的异常,包括运行时异常。 CrashHandler类: package com.xiaoqi.crashhandlerdemo; import java.io.

dashen的博客 4144

android: 捕获程序退出异常

http://blog.163.com/liu_jun_y/blog/static/188086312201172945241235/ 转载于:https://www.cnblogs.com/ligang305/archive/2012/11/16/2773536.html

weixin_30652271的博客 80

Android 退出程序总结

第一种方法:终止当前正在运行的Java虚拟机,导致程序终止 System.exit(0); 或者 Runtime.getRuntime().exit(0); 第二种方法:强制关闭与该包有关联的一切执行 ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);    ma

小坏大包 542

【转】Android应用程序完全退出

原文网址:http://www.yoyong.com/archives/199 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://smallwoniu.blog.51cto.com/3911954/1248643 前段期间,参加比赛做项目时遇到了一个问题:Android中应用程序弹出退出对话框退出应用程序时,老是出现上一个...

weixin_33795743的博客 125
上一篇: Android 开源框架ViewPageIndicator 和 ViewPage
下一篇: 坚持学习,坚持阅读,坚持思考
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值