在Android应用开发中,有时需要由应用程序本省获得异常报告并提交给开发者,这样就需要获得App崩溃的信息。利用Java中的UncaughtExceptionHandler可以很方便的实现这个操作。默认情况下,线程执行中发生了未捕获的异常,会由默认的DefaultUncaughtExceptionHandler来处理。为了介入到这个操作中并添加自定义的逻辑,需要继承UncaughtExceptionHandler,然后添加自己的逻辑代码。
代码示例:
import java.lang.Thread.UncaughtExceptionHandler; import android.content.Context; public class CrashHandler implements UncaughtExceptionHandler { private static CrashHandler instance; private Context mContext; private Thread.UncaughtExceptionHandler mDefaultHandler; private CrashHandler() { } public static CrashHandler getInstance() { if (instance == null) { instance = new CrashHandler(); } return instance; } public void init(Context context) { mContext = context; mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); } @Override public void uncaughtException(Thread thread, Throwable ex) { } }
说明:
- 自定义的处理操作需要添加到public void uncaughtException(Thread thread, Throwable ex)方法中;
- 从ex中可获得追踪的堆栈信息,下面示例是把相关信息保存到文件:
private void save2File (Throwable ex) throws Exception { StackTraceElement[] stacks = ex.getStackTrace(); File file = BUG_REPORT_FILE; PrintWriter pw = null; pw = new PrintWriter(new FileOutputStream(file)); StringBuilder sb = new StringBuilder(); int len = stacks.length; for (int i = 0; i < len; i++) { StackTraceElement stack = stacks[i]; sb.setLength(0); sb.append(stack.getClassName()).append("#"); sb.append(stack.getMethodName()).append(":"); sb.append(stack.getLineNumber()); pw.println(sb.toString()); } pw.close(); }
- 在uncaughtException中处理未捕获异常时,可以根据自定义操作的完成情况,来选择是否执行默认的mDefaultHandler的uncaughtException操作;
在Activity中的调用方法:
CrashHandler.getInstance().init(this);
至于如何测试,可以throw一个异常:
throw new InvalidParameterException();
或者写一行产生异常的代码:
int a = 0, b = 0; a = a / b;
相关推荐
`Android异常捕获demo`主要展示了如何有效地捕获和处理两种重要的错误类型:应用程序无响应(ANR)和未捕获异常(UncaughtExceptionHandler)。下面我们将深入探讨这两个概念以及如何在实际应用中实现它们。 1. **...
标题"android异常捕获,存在sd卡中"表明这是一个关于在Android系统中如何捕获并记录应用异常到SD卡上的技术实践。描述中的"app异常信息自动保存在sd卡中"进一步强调了这个机制主要是为了将异常日志存储在外部存储...
总之,"android 异常捕获源码.zip"中的ACRA项目提供了全面的Android异常处理解决方案,对于提高应用的质量和用户体验有着重要的价值。开发者不仅可以直接使用ACRA,也可以借鉴其设计思想,为自己的应用构建更加完善...
总结来说,Android异常捕获是提升应用稳定性和用户体验的关键步骤。通过自定义`UncaughtExceptionHandler`,我们可以收集并记录异常信息,甚至在发生异常时主动向开发者报告,以便及时修复问题。在实际开发中,还应...
Android异常捕获机制主要涉及到Java语言的异常处理和自定义的CrashHandler。本文将深入探讨这两个方面,并结合`YangdechengApplication`这个应用实例,来阐述如何在Android应用中有效地进行异常管理。 一、Java异常...
"无法运行android异常捕获存在sd卡中.rar"这个文件可能包含了开发者在调试过程中记录的一些错误日志或者异常堆栈信息,这些信息对于诊断和修复问题至关重要。 首先,我们要了解Android中的异常处理机制。在Java编程...
2. **异常捕获**:Android采用try-catch-finally语句块进行异常捕获。在try块中执行可能抛出异常的代码,catch块用于捕获并处理异常,finally块确保某些代码(如资源释放)无论是否发生异常都会执行。 3. **自定义...
Android捕获全局异常并写日志保存到sd卡,捕获异常消息后输出这个消息,可避免APP强制退出,抛出NullPointException玩玩哈,捕获全局异常是因为有的异常我们捕获不到,捕获时我们采用同步方法,以免单例多线程环境下...
本教程将详细讲解如何在Android中实现异常捕获并将其上传到服务器。 首先,我们来理解异常捕获的基本概念。在Java(Android的编程语言)中,异常是程序运行时发生的错误,如空指针异常(NullPointerException)、...
下面将详细解释如何在Android中实现全局异常捕获,以及它的重要性。 首先,让我们理解什么是全局异常捕获。全局异常捕获是指在应用的整个生命周期内,无论在哪个线程或者哪个函数中,只要发生未被捕获的异常,都能...
在Android开发中,全局异常捕获是一个至关重要的实践,它能确保应用在遇到未预期的错误时仍能保持稳定,并提供良好的用户体验。标题"android全局异常捕获 exception_global"和描述都指向了这个主题,表明我们将探讨...
移动开发中不可避免的闪退、崩溃等异常一直是困扰开发者难题,该案例是一个全局异常捕获类,方便开发者查看原因,并且将异常信息记录保存到手机本地log日志中,方便在本机测试不出异常却在客户那边出现异常时,客户...
本篇将详细介绍如何在Android中实现全局异常捕获,并提供一个名为"CrashHandler"的完整工程源码。 首先,我们需要了解Android中的异常处理机制。在Java中,每个线程都有一个默认的`UncaughtExceptionHandler`,当...
本文将深入探讨“Android全局异常捕获”的概念、实现方法以及其在实际开发中的应用。 全局异常捕获是指在整个应用程序生命周期内,无论哪个线程或者哪个函数抛出的异常,都能被一个全局的异常处理器捕获到。这样,...
5. **使用第三方库**:市面上有很多成熟的Android异常处理库,如ACRA(Android Crash Report Assistant)、Crashlytics等,它们能提供更全面的异常捕获、分析和报告功能,简化开发者的日常工作。 总结,Android应用...
除了基本的异常捕捉,Android还提供了`Thread.setDefaultUncaughtExceptionHandler`方法,允许开发者自定义全局的未捕获异常处理器。这样,即使在没有`try-catch`块的地方抛出异常,系统也会调用这个处理器,从而...
Android 全局异常错误或崩溃捕捉。当出现崩溃,软件不会闪退,会出现弹出一个对话框,异常错误信息保存在sd卡一个文件夹下。后续需要还可以发送到服务器的。我博客网址: http://blog.csdn.net/qq_16064871。我写了...
AndroidCrash全局崩溃异常捕获机制就是为了这一目的而设计的。它是一种技术手段,用于在应用程序出现未预期错误导致崩溃时,提供友好的用户反馈界面,同时收集设备信息和异常详情,并将这些数据发送到服务器进行分析...
总结来说,Android异常日志捕获是调试和优化应用的关键步骤。通过使用Log类、自定义异常处理器和高级日志管理策略,开发者可以更好地理解程序运行状态,及时发现并解决问题,提升应用的质量和用户体验。同时,注意...