Android借助Application重写App的Crash(简易版)
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(简易版)相关推荐
- 一个简易版的新闻应用(同时兼容手机和平板)
代码可能有点长,需要耐心看几遍.前前后后我看了5遍才把整个流程吃透,相信你一定比我聪明!!! 新建一个FragmentBestPractice项目 (让ADT帮我们自动创建活动--活动名:MainAc ...
- Android shell脚本自动启动app,关闭app,遇到crash自动停止
一.背景 当应用发现app在启动的时候会出现问题,但是需要手动测试很多次才可以复现的问题,可以考虑写一个自动化测试脚本. 二.Android启动和关闭app命令 1.启动应用需要知道应用的包名和mai ...
- 【Android Studio学习】第二篇、APP实现画简易的波形图
目录 第一部分.前言 1.效果展示 2.参考博客 3.实现方式 第二部分.详细步骤 1.添加波形函数的依赖 2.添加一个管理类 3.修改activity_main.xml文件的代码 4.修改MainA ...
- Android采用Application总结一下
什么是 Application Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象.用 ...
- Android 借助Stetho在Chrome上调试Android网络、数据库、Sharedpreferences
Android 借助Stetho在Chrome上调试Android网络.数据库.Sharedpreferences 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/a ...
- Android之登录注册——简易版
今天,我要分享给大家的是Android中常见的一个的登录注册的案例,我这里写的是简易版,如果大家有更精彩的拓展,可以自行发挥哦! 运行过程相信大家都已经心知肚明了,所以我在这里就直接发布代码了,其中有 ...
- Android项目—帖话APP
项目介绍 贴话APP实现的功能类似于百度贴吧,实现发帖,读帖,修改帖,删帖功能, 项目特色在于借助个人服务器的数据库实现网络服务,利用本地LitaPal实现用户数据缓存. 没有唯一用户的说法,使用人可 ...
- 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...
- ios和android测试面试题目,App测试面试题总结
前言 现在面试个测试岗位,都是要求全能的,web.接口.app啥都要会测,那么APP测试一般需要哪些技能呢? 面试app测试岗位会被问到哪些问题,怎样让面试管觉得你对APP测试很精通的样子? 本篇总结 ...
最新文章
- 同一账户同时只能在一处登陆(单点登陆)
- kmemleak的使用---内存泄露检测工具【转】
- 日期型转json格式(springboot)
- MA5680T OLT管理软件,全智能判断板卡,无人值守策略,根据光猫类型自动扫描添加光猫...
- [js] 使用ajax请求真的不安全吗?为什么?
- 数据结构C语言实现—队列操作
- Nagios(八)—— Nagios Web 端管理工具Nagiosql
- 打开本地html加载网页慢,电脑检查网速正常但打开网页慢如何解决
- java常见问题incompatible types
- STM32 SWD 只能下载一次的问题
- Windows下用Python获取电脑显示器物理尺寸和PPI
- CMMI认证所需要的全部流程在这里
- golang 日志库seelog 笔记
- springboot发送邮件的一些坑与代码示例
- 基于php校园网站的开发,基于PHP的小学校园网站开发
- excel转json对象工具推荐
- Google Cartographer 《Real-Time Loop Closure in 2D LIDAR SLAM》翻译 (中英对照)
- 笔记本显示网络电缆被拔出怎么解决_本地连接网络电缆被拔出 本地连接网络电缆被拔出解决方法【图文】...
- Netty谈谈ByteBuf
- x86android刺激战场,OPPO Find X 游戏实测:未来旗舰 实力强悍如斯
热门文章
- c语言刷新输出_在fx-9860系列上用C语言编程
- 机器人学习--University of Alberta自主机器人导航课
- 光流 | 光流算法对比:Farneback、Horn-Schunck、Lucas-Kanade、Lucas-Kanade derivative of Gaussian(附Matlab与C++代码)
- 计算机一级单元格公式设置错误是什么原因,excel表格公式出错怎么解决,电子表格求和出错...
- MFC之ComboBox控件用法
- 怎么在页面中使用mixins_模压化粪池使用过程中怎么管理?
- 数据结构与算法(C++)– 树(Tree)
- access开发精要(12)-文本 和 备注 数据类型格式(1)
- tensorflow随笔-collection收集器
- 【推荐系统】多视图多示例多标签的协同矩阵分解