• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android 对程序异常崩溃的捕捉,android崩溃捕捉

Android 对程序异常崩溃的捕捉,android崩溃捕捉

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android程序崩溃,android 退出程序,android小程序,android小程序源代码,android程序设计等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android 对程序异常崩溃的捕捉,android崩溃捕捉


转载博客:http://blog.csdn.net/i_lovefish/article/details/17719081

以下为异常捕捉处理代码:  
import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.PrintWriter;  
import java.io.StringWriter;  
import java.io.Writer;  
import java.lang.Thread.UncaughtExceptionHandler;  
import java.lang.reflect.Field;  
import java.text.DateFormat;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.HashMap;  
import java.util.Map;  
  
import android.content.Context;  
import android.content.pm.PackageInfo;  
import android.content.pm.PackageManager;  
import android.content.pm.PackageManager.NameNotFoundException;  
import android.os.Build;  
import android.os.Environment;  
import android.os.Looper;  
import android.util.Log;  
import android.widget.Toast;  
      
/**   
 * UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告.  
 *  
 *  需要在Application中注册,为了要在程序启动器就监控整个程序。 
 */      
public class CrashHandler implements UncaughtExceptionHandler {      
          
    public static final String TAG = "CrashHandler";      
          
    //系统默认的UncaughtException处理类       
    private Thread.UncaughtExceptionHandler mDefaultHandler;      
    //CrashHandler实例      
    private static CrashHandler instance;  
   //程序的Context对象      
    private Context mContext;      
    //用来存储设备信息和异常信息      
    private Map<String, String> infos = new HashMap<String, String>();      
      
    //用于格式化日期,作为日志文件名的一部分      
    private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");      
      
    /** 保证只有一个CrashHandler实例 */      
    private CrashHandler() {}      
      
    /** 获取CrashHandler实例 ,单例模式 */      
    public static CrashHandler getInstance() {      
        if(instance == null)  
            instance = new CrashHandler();     
        return instance;      
    }      
      
    /**   
     * 初始化   
     */      
    public void init(Context context) {      
        mContext = context;      
        //获取系统默认的UncaughtException处理器      
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();      
        //设置该CrashHandler为程序的默认处理器      
        Thread.setDefaultUncaughtExceptionHandler(this);      
    }      
      
    /**   
     * 当UncaughtException发生时会转入该函数来处理   
     */      
    @Override      
    public void uncaughtException(Thread thread, Throwable ex) {      
        if (!handleException(ex) && mDefaultHandler != null) {      
            //如果用户没有处理则让系统默认的异常处理器来处理      
            mDefaultHandler.uncaughtException(thread, ex);      
        } else {      
            try {      
                Thread.sleep(3000);      
            } catch (InterruptedException e) {      
                Log.e(TAG, "error : ", e);      
            }      
            //退出程序      
            android.os.Process.killProcess(android.os.Process.myPid());      
            System.exit(1);      
        }      
    }      
      
    /**   
     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.   
     *    
     * @param ex   
     * @return true:如果处理了该异常信息;否则返回false.   
     */      
    private boolean handleException(Throwable ex) {      
        if (ex == null) {      
            return false;      
        }      
        //收集设备参数信息       
        collectDeviceInfo(mContext);      
          
        //使用Toast来显示异常信息      
        new Thread() {      
            @Override      
            public void run() {      
                Looper.prepare();      
                Toast.makeText(mContext, "很抱歉,程序出现异常,即将退出.", Toast.LENGTH_SHORT).show();      
                Looper.loop();      
            }      
        }.start();      
        //保存日志文件       
        saveCatchInfo2File(ex);    
        return true;      
    }      
          
    /**   
     * 收集设备参数信息   
     * @param ctx   
     */      
    public void collectDeviceInfo(Context ctx) {      
        try {      
            PackageManager pm = ctx.getPackageManager();      
            PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), PackageManager.GET_ACTIVITIES);      
            if (pi != null) {      
                String versionName = pi.versionName == null ? "null" : pi.versionName;      
                String versionCode = pi.versionCode + "";      
                infos.put("versionName", versionName);      
                infos.put("versionCode", versionCode);      
            }      
        } catch (NameNotFoundException e) {      
            Log.e(TAG, "an error occured when collect package info", e);      
        }      
        Field[] fields = Build.class.getDeclaredFields();      
        for (Field field : fields) {      
            try {      
                field.setAccessible(true);      
             



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 对程序异常崩溃的捕捉,android崩溃捕捉

相关文章

  • 2017-05-26Android新手入门2016(6)--客户端编程思想的初步思考和Android学习路线
  • 2017-05-26Java字节流在Android中的使用,java字节流android
  • 2017-05-26Linux内核系列—6.操作系统开发之内存分页机制,linux分页
  • 2017-05-26去除GridView选中时的蓝色背景,gridview选中蓝色
  • 2017-07-23Activity、View、Window三者之间的关系
  • 2017-05-26Kotlin的android扩展:对findViewById说再见(KAD 04),kotlinfindviewbyid
  • 2017-05-26Android中Fragment的两种创建方式,androidfragment
  • 2017-05-26svn环境搭建(不同目录、设置不同的权限)
  • 2017-05-26【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新,androidtinker
  • 2017-05-26为jenkins的每个build设置description(转自hp_truth的文章)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Xamarin.Android 的照相機使用,xamarin.android
    • RelativeLayout的位置属性总结,relativelayout总结
    • npm源切换,npm源
    • ubuntu vncserver搭建
    • 我的android学习经历4,android学习经历4
    • WKWebView与js交互之完美解决方案
    • centos7 系统cache的一例故障及解决
    • 电商常用的正则表达式,字符串,地址操作,电商正则表达式
    • 8.3.2 绘图类实战示例
    • Android系统input设备的插拔和事件监听

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有