Android借助Application重写App的Crash(简易版)
发布日期:2021-06-30 11:24:19 浏览次数:4 分类:技术文章

本文共 4146 字,大约阅读时间需要 13 分钟。

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 {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		init();	}	//Crash	private void init(){		System.out.println((9727/0)+"");	}}

CrashApplication如下:

package cn.testcrash;import android.app.Application;public class CrashApplication extends Application {	@Override	public 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时调用该方法	 */	@Override	public 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() {			@Override			public 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
hashMap=getBaseInfo(context); StringBuilder stringBuilder=new StringBuilder(); for(Map.Entry
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
getBaseInfo(Context context){ HashMap
hashMap = new HashMap
(); 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如下:

 

AndroidManifest.xml如下:

 

转载地址:https://it9527.blog.csdn.net/article/details/9714443 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android借助Application重写App的Crash(完整版)
下一篇:自定义Application使用示例——几个Activity共同操作某个变量

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月26日 23时09分36秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章