安卓程序崩溃异常处理

 

我们经常会面临这样的情景:应用发布上线后,收到用户反馈说app崩溃了,但自己重现不了。这时候怎么办呢?


很多朋友都会想到用友盟等第三方插件实现,但鉴于安全性要求较高的支付系统,是不允许使用未知来源压缩包/有后门的第三方插件。这时候我们可以考虑自己写一个。

package System.Interface.free;

import java.lang.Thread.UncaughtExceptionHandler;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Looper;

public class CrashHandler implements UncaughtExceptionHandler {

    public static final String TAG ="CrashHandler";
    private static CrashHandler INSTANCE =new CrashHandler();
    private Context mContext;
    private Thread.UncaughtExceptionHandler mDefaultHandler ;
    private CrashHandler() {

    }
     public static CrashHandler getInstance() {
            return INSTANCE;
        }
     public void init(Context ctx) {
            mContext = ctx;
            mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
            Thread.setDefaultUncaughtExceptionHandler(this);
        }
    @Override
    public void uncaughtException(Thread arg0, Throwable arg1) {
        // TODO Auto-generated method stub
        System.out.println("uncaughtException");

        new Thread() {
            @Override
            public void run() {
                Looper.prepare();
                new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false)
                        .setMessage("程序崩溃了...").setNeutralButton("我知道了", new OnClickListener() {
                            @Override
                            public void onClick(DialogInterface arg0, int arg1) {
                                // TODO Auto-generated method stub
                                System.exit(0);
                            }
                        })
                        .create().show();
                Looper.loop();
            }
        }.start();
    }
     /**
     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑
     *
     * @param ex
     * @return true:如果处理了该异常信息;否则返回false
     */
    private boolean handleException(Throwable ex) {
        if (ex == null) {
            return true;
        }
        // new Handler(Looper.getMainLooper()).post(new Runnable() {
        // @Override
        // public void run() {
        // new AlertDialog.Builder(mContext).setTitle("提示")
        // .setMessage("程序崩溃了...").setNeutralButton("我知道了", null)
        // .create().show();
        // }
        // });

        return true;
    }
}

原文地址:https://www.cnblogs.com/edangame/p/12585912.html

时间: 2024-10-20 09:51:34

安卓程序崩溃异常处理的相关文章

VC 程序崩溃异常处理集锦

1 Run-Time Check Failure: being used without being defined 场景 将一个未曾初始化的结构体作为参数传递给一个函数,在运行时出现如上的错误,尽管没有在函数中使用,但是依然需要进行结构体的初始化,重申初始化的重要性 2 Run-Time Check Failure Stack around the variable 'xxx'was corrupted 场景 查找所有xxx的引用,仔细推敲任何一处可能导致的数组越界问题,经常出现的情况: 1

Android程序崩溃异常收集框架

最近在写Android程序崩溃异常处理,完成之后,稍加封装与大家分享. 我的思路是这样的,在程序崩溃之后,将异常信息保存到一个日志文件中,然后对该文件进行处理,比如发送到邮箱,或发送到服务器. 所以,第一步是先定义一个接口,用于在保存好日志之后的回调.代码如下: /* * @(#)CrashListener.java Project: crash * Date:2014-5-27 * * Copyright (c) 2014 CFuture09, Institute of Software, *

【转】程序崩溃时自动记录minidump的c++类

原帖:程序崩溃时自动记录minidump的c++类 封装了一个C++类,当程序意外崩溃的时候可以生成dump文件,以便确定错误原因. 头文件: //crash_dumper_w32.h #ifndef _CRASH_DUMPER_H_ #define _CRASH_DUMPER_H_ #include <windows.h> class CrashDumper { public: CrashDumper(); ~CrashDumper(); static bool _PlaceHolder()

如何定位Release 版本中程序崩溃的位置 ---利用map文件 拦截windows崩溃函数

1       案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的“名言”,恐怕是程序员最怕见也最常见的东西了. 在一个大型软件的测试过程中,初期出现程序崩溃似乎成了不可避免的事.其实测试中出现程序崩溃并不可怕,反而是测试的成功.作为开发的我们更需要关心的是程序中的哪个函数或哪一行导致了系统崩溃,这样才能有针对性的进行改正. 本文描述了自己总结的几种定位崩溃的办法.

Android记录程序崩溃Log写入文件

将导致程序崩溃的堆栈调用Log写入文件,便于收集bug.在调试安卓程序,由于某些原因调试时手机不能连接PC端,无法通过IDE查看程序崩溃的Log,希望log能够写入文件中,对于已经发布的App可以通过该功能收集Bug. 01import java.io.FileNotFoundException; 02import java.io.FileOutputStream; 03import java.io.IOException; 04import java.io.PrintStream; 05imp

VEH帮你定位程序崩溃地址

之前朋友有一个服务端程序,总是受到一些人的恶意漏洞攻击,没有源代码,只好反汇编修复了漏洞,并且使用WinLicense加保护授权. 漏洞总不是一次可以修复完的,恶意攻击并没有停止,然后加了WL保护程序在崩溃的时候在没有提示信息,服务器日志中也没有记录任何有用的信息了,这里所需要有用的信息即是崩溃时候汇编代码运行的内存地址.c++写的程序崩溃的时候我们经常可以看到这种包含了运行址,以及访问内存地址相关信息的对话框. 首先想到的办法是使用windbg的adplus -crash dump内存分析,c

Android程序崩溃统一处理机制

在应用发布以后,由于安卓机型的千差万别 ,可能会出现各种各样的问题,这时候如果我们可以将这些信息收集起来,并进行修改就很不错了.下面就来讨论一下怎么处理程序崩溃以后,错误信息的手机. Java中已经提供了一个接口Thread.UncaughtExceptionHandler来对运行时的异常进行处理.只需要实现这个接口,并覆写 public void uncaughtException(Thread thread, Throwable ex) 方法即可. 由于Application是Android

【转载】C++程序崩溃排查方法

windows下C++程序release版本崩溃错误排查方法. 一个你精心设计的24小时不间断运行,多线程的程序,突然运行了几个月后崩了,此问题是非常难以排查的,也是很头疼的问题. 现利用Google开源工具crashrpt与Microsoft windbg工具,解决这个问题,并分享给大家. 使用工具Crashrpt.Windbg.因为windbg这个工具很常见,暂不介绍.其中重点介绍一下crashrpt. 一.crashrpt 简介 crashrpt是一个包含能够在程序出现各种类型未处理异常时

如何防止后台线程抛出的异常让程序崩溃退出

原文:如何防止后台线程抛出的异常让程序崩溃退出 如果你的程序抛了异常,你是怎么处理的呢?等待程序崩溃退出?还是进行补救? 如果是做 UI 开发,很容易就找到 Dispatcher.UnhandledException 事件,然后在事件中进行补救.如果补救成功,可以设置 e.Handled = true 来阻止异常继续让程序崩溃退出.但是,如果是后台线程抛出了异常呢?并没有 Dispatcher 可以用.所以我们就束手就擒让程序自己退出吗? WPF 和 Windows Forms 都是微软的框架,