`
wangleyiang
  • 浏览: 218907 次
社区版块
存档分类
最新评论

Android 异常捕获

阅读更多

在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)

    `Android异常捕获demo`主要展示了如何有效地捕获和处理两种重要的错误类型:应用程序无响应(ANR)和未捕获异常(UncaughtExceptionHandler)。下面我们将深入探讨这两个概念以及如何在实际应用中实现它们。 1. **...

    android异常捕获,存在sd卡中

    标题"android异常捕获,存在sd卡中"表明这是一个关于在Android系统中如何捕获并记录应用异常到SD卡上的技术实践。描述中的"app异常信息自动保存在sd卡中"进一步强调了这个机制主要是为了将异常日志存储在外部存储...

    android 异常捕获源码.zip

    总之,"android 异常捕获源码.zip"中的ACRA项目提供了全面的Android异常处理解决方案,对于提高应用的质量和用户体验有着重要的价值。开发者不仅可以直接使用ACRA,也可以借鉴其设计思想,为自己的应用构建更加完善...

    Android异常捕获(发邮件+写文件)

    总结来说,Android异常捕获是提升应用稳定性和用户体验的关键步骤。通过自定义`UncaughtExceptionHandler`,我们可以收集并记录异常信息,甚至在发生异常时主动向开发者报告,以便及时修复问题。在实际开发中,还应...

    Android异常捕获

    Android异常捕获机制主要涉及到Java语言的异常处理和自定义的CrashHandler。本文将深入探讨这两个方面,并结合`YangdechengApplication`这个应用实例,来阐述如何在Android应用中有效地进行异常管理。 一、Java异常...

    无法运行android异常捕获存在sd卡中.rar

    "无法运行android异常捕获存在sd卡中.rar"这个文件可能包含了开发者在调试过程中记录的一些错误日志或者异常堆栈信息,这些信息对于诊断和修复问题至关重要。 首先,我们要了解Android中的异常处理机制。在Java编程...

    android 异常捕捉和日志文件保存

    2. **异常捕获**:Android采用try-catch-finally语句块进行异常捕获。在try块中执行可能抛出异常的代码,catch块用于捕获并处理异常,finally块确保某些代码(如资源释放)无论是否发生异常都会执行。 3. **自定义...

    Android捕获全局异常并写日志保存到sd卡.rar

    Android捕获全局异常并写日志保存到sd卡,捕获异常消息后输出这个消息,可避免APP强制退出,抛出NullPointException玩玩哈,捕获全局异常是因为有的异常我们捕获不到,捕获时我们采用同步方法,以免单例多线程环境下...

    Android-Android异常捕获以及上传到服务器

    本教程将详细讲解如何在Android中实现异常捕获并将其上传到服务器。 首先,我们来理解异常捕获的基本概念。在Java(Android的编程语言)中,异常是程序运行时发生的错误,如空指针异常(NullPointerException)、...

    Android 全局异常捕获

    下面将详细解释如何在Android中实现全局异常捕获,以及它的重要性。 首先,让我们理解什么是全局异常捕获。全局异常捕获是指在应用的整个生命周期内,无论在哪个线程或者哪个函数中,只要发生未被捕获的异常,都能...

    android异常捕获并写入log日志中

    移动开发中不可避免的闪退、崩溃等异常一直是困扰开发者难题,该案例是一个全局异常捕获类,方便开发者查看原因,并且将异常信息记录保存到手机本地log日志中,方便在本机测试不出异常却在客户那边出现异常时,客户...

    android捕获全局异常,CrashHandler完整工程源码

    本篇将详细介绍如何在Android中实现全局异常捕获,并提供一个名为"CrashHandler"的完整工程源码。 首先,我们需要了解Android中的异常处理机制。在Java中,每个线程都有一个默认的`UncaughtExceptionHandler`,当...

    android全局异常捕获

    本文将深入探讨“Android全局异常捕获”的概念、实现方法以及其在实际开发中的应用。 全局异常捕获是指在整个应用程序生命周期内,无论哪个线程或者哪个函数抛出的异常,都能被一个全局的异常处理器捕获到。这样,...

    android 异常捕获

    5. **使用第三方库**:市面上有很多成熟的Android异常处理库,如ACRA(Android Crash Report Assistant)、Crashlytics等,它们能提供更全面的异常捕获、分析和报告功能,简化开发者的日常工作。 总结,Android应用...

    android异常捕捉

    除了基本的异常捕捉,Android还提供了`Thread.setDefaultUncaughtExceptionHandler`方法,允许开发者自定义全局的未捕获异常处理器。这样,即使在没有`try-catch`块的地方抛出异常,系统也会调用这个处理器,从而...

    Android 全局异常错误或崩溃捕捉

    Android 全局异常错误或崩溃捕捉。当出现崩溃,软件不会闪退,会出现弹出一个对话框,异常错误信息保存在sd卡一个文件夹下。后续需要还可以发送到服务器的。我博客网址: http://blog.csdn.net/qq_16064871。我写了...

    android全局异常捕获 exception_global

    在Android开发中,全局异常捕获是一个至关重要的实践,它能确保应用在遇到未预期的错误时仍能保持稳定,并提供良好的用户体验。标题"android全局异常捕获 exception_global"和描述都指向了这个主题,表明我们将探讨...

    Android异常日志捕获

    总结来说,Android异常日志捕获是调试和优化应用的关键步骤。通过使用Log类、自定义异常处理器和高级日志管理策略,开发者可以更好地理解程序运行状态,及时发现并解决问题,提升应用的质量和用户体验。同时,注意...

    Android全局异常捕获及上传服务器

    本主题将深入探讨Android全局异常捕获的机制,以及如何将捕获到的异常信息加密后上传到服务器。 首先,让我们了解如何实现全局异常捕获。在Android中,我们可以创建一个`Thread.UncaughtExceptionHandler`的实现类...

Global site tag (gtag.js) - Google Analytics