MainActivity如下:

package cn.testcrash;
import android.app.Activity;
import android.os.Bundle;
/*** Demo描述:* 借助于Application自定义Crash* * 参考资料:* 1 http://blog.csdn.net/xiaanming/article/details/9344703* 2 http://blog.csdn.net/itachi85/article/details/9102021*/
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}//Crashprivate void init(){System.out.println((9727/0)+"");}
}

CrashApplication如下:

package cn.testcrash;
import android.app.Application;public class CrashApplication extends Application {@Overridepublic void onCreate() {super.onCreate();CrashHandler crashHandler=CrashHandler.getInstance();//指定Crash时的处理程序crashHandler.setCrashHandler(getApplicationContext());}
}

CrashHandler如下:

package cn.testcrash;
import java.lang.Thread.UncaughtExceptionHandler;
import android.content.Context;
import android.os.Looper;
import android.widget.Toast;
public class CrashHandler implements UncaughtExceptionHandler {private Context mContext;private static CrashHandler mCrashHandler=new CrashHandler();public static CrashHandler getInstance(){return mCrashHandler;}/*** 设置当线程由于未捕获到异常而突然终止的默认处理程序。*/public void setCrashHandler(Context context){mContext=context;Thread.setDefaultUncaughtExceptionHandler(this);}/*** 当发生Crash时调用该方法*/@Overridepublic void uncaughtException(Thread thread, Throwable throwable) {//保存错误日志到SD卡Utils.saveInfoToSDCard(mContext, throwable);//提示Crash信息showCrashTipToast();try {Thread.sleep(3000);} catch (Exception e) {}//退出应用System.exit(0);}private void showCrashTipToast() {new Thread(new Runnable() {@Overridepublic void run() {Looper.prepare();Toast.makeText(mContext, "I am very sorry", Toast.LENGTH_LONG).show();Looper.loop();}}).start();}}

Utils如下:

package cn.testcrash;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Build;public class Utils {public static void saveInfoToSDCard(Context context, Throwable throwable) {HashMap<String, String> hashMap=getBaseInfo(context);StringBuilder stringBuilder=new StringBuilder();for(Map.Entry<String, String> entry:hashMap.entrySet()){String key=entry.getKey();String value=entry.getValue();stringBuilder.append(key).append("=").append(value).append("\n");}System.out.println("stringBuilder.toString()如下:"+"\n"+stringBuilder.toString());/*** 其余逻辑省略*/}/*** 获取设备及该App的基本信息*/public static HashMap<String, String> getBaseInfo(Context context){HashMap<String, String> hashMap = new HashMap<String, String>();PackageManager packageManager = context.getPackageManager();PackageInfo packageInfo = null;try {packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES);} catch (NameNotFoundException e) {e.printStackTrace();}hashMap.put("versionName", packageInfo.versionName);hashMap.put("versionCode", packageInfo.versionCode+"");hashMap.put("MODEL",  Build.MODEL+"");hashMap.put("SDK_INT",Build.VERSION.SDK_INT+"");hashMap.put("RELEASE",Build.VERSION.RELEASE+"");hashMap.put("PRODUCT",Build.PRODUCT+"");return hashMap;}private String getCurrentTime(){String currentTime="";long currentTimeMillis=System.currentTimeMillis();System.setProperty("user.timezone", "Asia/Shanghai");  TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");  TimeZone.setDefault(timeZone);  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");Date currentDate=new Date(currentTimeMillis);currentTime = simpleDateFormat.format(currentDate);  System.out.println("currentTime="+currentTime);return currentTime;}}

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="自定义Crash" android:layout_centerInParent="true"android:textSize="28sp"/></RelativeLayout>

AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.testcrash"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="8" /><applicationandroid:name="cn.testcrash.CrashApplication"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="cn.testcrash.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

Android借助Application重写App的Crash(简易版)相关推荐

  1. 一个简易版的新闻应用(同时兼容手机和平板)

    代码可能有点长,需要耐心看几遍.前前后后我看了5遍才把整个流程吃透,相信你一定比我聪明!!! 新建一个FragmentBestPractice项目 (让ADT帮我们自动创建活动--活动名:MainAc ...

  2. Android shell脚本自动启动app,关闭app,遇到crash自动停止

    一.背景 当应用发现app在启动的时候会出现问题,但是需要手动测试很多次才可以复现的问题,可以考虑写一个自动化测试脚本. 二.Android启动和关闭app命令 1.启动应用需要知道应用的包名和mai ...

  3. 【Android Studio学习】第二篇、APP实现画简易的波形图

    目录 第一部分.前言 1.效果展示 2.参考博客 3.实现方式 第二部分.详细步骤 1.添加波形函数的依赖 2.添加一个管理类 3.修改activity_main.xml文件的代码 4.修改MainA ...

  4. Android采用Application总结一下

    什么是 Application Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象.用 ...

  5. Android 借助Stetho在Chrome上调试Android网络、数据库、Sharedpreferences

    Android 借助Stetho在Chrome上调试Android网络.数据库.Sharedpreferences 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/a ...

  6. Android之登录注册——简易版

    今天,我要分享给大家的是Android中常见的一个的登录注册的案例,我这里写的是简易版,如果大家有更精彩的拓展,可以自行发挥哦! 运行过程相信大家都已经心知肚明了,所以我在这里就直接发布代码了,其中有 ...

  7. Android项目—帖话APP

    项目介绍 贴话APP实现的功能类似于百度贴吧,实现发帖,读帖,修改帖,删帖功能, 项目特色在于借助个人服务器的数据库实现网络服务,利用本地LitaPal实现用户数据缓存. 没有唯一用户的说法,使用人可 ...

  8. 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...

  9. ios和android测试面试题目,App测试面试题总结

    前言 现在面试个测试岗位,都是要求全能的,web.接口.app啥都要会测,那么APP测试一般需要哪些技能呢? 面试app测试岗位会被问到哪些问题,怎样让面试管觉得你对APP测试很精通的样子? 本篇总结 ...

最新文章

  1. 同一账户同时只能在一处登陆(单点登陆)
  2. kmemleak的使用---内存泄露检测工具【转】
  3. 日期型转json格式(springboot)
  4. MA5680T OLT管理软件,全智能判断板卡,无人值守策略,根据光猫类型自动扫描添加光猫...
  5. [js] 使用ajax请求真的不安全吗?为什么?
  6. 数据结构C语言实现—队列操作
  7. Nagios(八)—— Nagios Web 端管理工具Nagiosql
  8. 打开本地html加载网页慢,电脑检查网速正常但打开网页慢如何解决
  9. java常见问题incompatible types
  10. STM32 SWD 只能下载一次的问题
  11. Windows下用Python获取电脑显示器物理尺寸和PPI
  12. CMMI认证所需要的全部流程在这里
  13. golang 日志库seelog 笔记
  14. springboot发送邮件的一些坑与代码示例
  15. 基于php校园网站的开发,基于PHP的小学校园网站开发
  16. excel转json对象工具推荐
  17. Google Cartographer 《Real-Time Loop Closure in 2D LIDAR SLAM》翻译 (中英对照)
  18. 笔记本显示网络电缆被拔出怎么解决_本地连接网络电缆被拔出 本地连接网络电缆被拔出解决方法【图文】...
  19. Netty谈谈ByteBuf
  20. x86android刺激战场,OPPO Find X 游戏实测:未来旗舰 实力强悍如斯

热门文章

  1. c语言刷新输出_在fx-9860系列上用C语言编程
  2. 机器人学习--University of Alberta自主机器人导航课
  3. 光流 | 光流算法对比:Farneback、Horn-Schunck、Lucas-Kanade、Lucas-Kanade derivative of Gaussian(附Matlab与C++代码)
  4. 计算机一级单元格公式设置错误是什么原因,excel表格公式出错怎么解决,电子表格求和出错...
  5. MFC之ComboBox控件用法
  6. 怎么在页面中使用mixins_模压化粪池使用过程中怎么管理?
  7. 数据结构与算法(C++)– 树(Tree)
  8. access开发精要(12)-文本 和 备注 数据类型格式(1)
  9. tensorflow随笔-collection收集器
  10. 【推荐系统】多视图多示例多标签的协同矩阵分解