android 处理器crash刊物

日志记录程序是为了方便各种异常情况,为了方便日后的维修方案进行维修,程序无法百分百健康,完美,有必要保存在日志中代码。易于维护。Java了一个接口UncaughtExceptionHandler,Thread.setDefaultUncaughtExceptionHandler(handler)设置当线程因为未捕获到异常而突然终止,而且没有为该线程定义其它处理程序时所调用的默认处理程序。

所以我们能够继承UncaughtExceptionHandler。 在handler实现对日志的读写

   public class CrashHandler implements UncaughtExceptionHandler {
	// 系统默认的UncaughtException处理
	private Thread.UncaughtExceptionHandler mDefaultHandler;

	public CrashHandler() {
		mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
	}

	@Override
	public void uncaughtException(Thread thread, Throwable ex) {
		try {
			// 创建日志文件
			File file = createCreashLogFile();

			// 写入日志文件
			if (file != null && file.exists()) {
				writeLog(file, ex);
			}
		} catch (Exception e) {
		    LogUtils.w("", e);
		}

		// 将异常抛给系统处??

mDefaultHandler.uncaughtException(thread, ex);
	}

	private void writeLog(File logFile, Throwable ex) {
		PrintStream printStream = null;
		FileOutputStream fos = null;

		// 写入日志文件
		try {
			fos = new FileOutputStream(logFile);
			printStream = new PrintStream(fos);
			ex.printStackTrace(printStream);
		} catch (Exception e) {
		    LogUtils.w("", e);
		} finally {
			closeQuietly(printStream);
			closeQuietly(fos);
		}
	}

	private void closeQuietly(OutputStream os) {
		if (os != null) {
			try {
				os.close();
			} catch (IOException e) {
			    LogUtils.w("", e);
			}
		}
	}

	/** 创建??个空白的崩溃日志文件 */
	public static File createCreashLogFile() throws IOException {
		if (!isExternalStorageAvaliable()) { // ??

查存储是否可??
			return null;
		}

		File directory = new File(Environment.getExternalStorageDirectory()
				+ "/ViolationQuery/crash_log");
		if (!directory.exists()) {
			directory.mkdirs();
		}
		File file = new File(directory, createCrashLogFileName());
		if (file.exists()) {
			file.delete();
		}
		file.createNewFile();

		return file;
	}

	/** 存储是否可用 */
	public static boolean isExternalStorageAvaliable() {
		String state = Environment.getExternalStorageState();
		if (Environment.MEDIA_MOUNTED.equals(state)) {
			return true;
		} else {
			return false;
		}
	}

	private static String createCrashLogFileName() {
		String dateString = new SimpleDateFormat("yyyyMMdd_HHmmss",
				Locale.getDefault()).format(new Date());
		return "CrashLog_" + dateString + ".txt";
	}
}
<pre name="code" class="java">public class CrashManager {
	public static void start() {
		// 设置异常处理实例
		CrashHandler handler = new CrashHandler();
		Thread.setDefaultUncaughtExceptionHandler(handler);
	}
}

 然后在Application中调用Application中CrashManager.start();这样就大功告成了

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-08-09 06:35:28

android 处理器crash刊物的相关文章

Android程序crash处理

Android程序crash处理 时间 2014-11-24 13:45:37  CSDN博客 原文  http://blog.csdn.net/allen315410/article/details/41444053 主题 Android 在实际项目开发中,会出现很多的异常直接导致程序crash掉,在开发中我们可以通过logcat查看错误日志,Debug出现的异常,让程序安全的运行,但是在开发中有些异常隐藏的比较深,直到项目发布后,由于各种原因,譬如android设备不一致等等,android

Android程序Crash异常处理

在写程序时,肯定会碰到各种问题,在解决这些问题肯定要去看控制台打印的异常信息,根据控制台打印的异常信息来进行针对性的解决. 那么要解决程序运行在用户手机上崩溃的问题,必须得找到问题的原因.因此就要收集崩溃信息,也就是log日志. Android程序Crash时我们可以做的操作: 1.将Crash信息存到本地,然后上传到服务器,根据上传的异常信息进行针对性的处理: 2.系统自带的Crash界面是很不友好的,我们可以自定义程序Crash后的界面,做的友好点: 关于以上2中操作方式,自己的见解: 1.

Android Native crash日志分析

在Android应用crash的类型中,native类型crash应该是比较难的一种了,因为大家接触的少,然后相对也要多转几道工序,所有大部分对这个都比较生疏.虽然相关文章也有很多了,但是我在刚开始学的过程中还是遇到一些问题,下面一一记录,以便将来翻阅. 分析native crash 日志需要几个东西: addr2line,objdump,ndk-stack等几个工具 带symbols的so文件 log log native crash的日志都是从一行星号(*** *** *** *** ***

[翻译]如何安装ACRA-一个Android应用Crash跟踪系统

[翻译]如何安装ACRA-一个Android应用Crash跟踪系统 -在你自己的服务器上 How to setup ACRA, an Android Application Crash Tracking system, on your own host 原文地址: http://inthecheesefactory.com/blog/how-to-install-and-use-acra-android/en 开发一个手机应用有如此多的限制,比如硬件限制(CPU,内存,电池等等).如果你的代码不

Android程序Crash时的异常上报

转载请注明来源:http://blog.csdn.net/singwhatiwanna/article/details/17289479 前言 大家都知道,android应用不可避免的会发生crash,无论你的程序写的多完美,总是无法完全避免crash的发生,可能是由于android系统底层的bug,也可能是由于不充分的机型适配或者是糟糕的网络状况.当crash发生时,系统会kill掉你的程序,表现就是闪退或者程序已停止运行,这对用户来说是很不友好的,也是开发者所不愿意看到的,更糟糕的是,当用户

获取Android崩溃crash信息并写入日志发送邮件

一.实现Thread.UncaughtExceptionHandlerUnChecked异常发生时,由于没有相应的try…catch处理该异常对象,所以Java运行环境将会终止,程序将退出,也就是我们所说的Crash.Java API提供了一个全局异常捕获处理器,Android应用在Java层捕获Crash依赖的就是Thread.UncaughtExceptionHandler处理器接口,通常我们只需实现这个接口,并重写其中的uncaughtException方法,在该方法中可以读取Crash的

Android Tombstone/Crash的log分析和定位

有一句话叫做常在河边走,哪有不湿鞋.我们这些研究和开发Android的project师正应了这句话,相必大家在调试的时候常常会遇到这么个东西吧 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'XXXXXXXXX' pid: 1658, tid: 13086  >>> system_server <<< signal 11 (SIGSEGV), code

Android的crash的类型及原因

Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景:应用发生ANR. 崩溃症状:系统弹出窗口询问用户选择"Force Close"或者"Wait". "Force Close"将杀掉发生ANR的应用进程."Wait"将会等待系统择机恢复此应用进程. 发生原因:(1)应用主线程卡住

Android jni Crash堆栈信息分析

如何定位Android NDK开发中遇到的错误 NDK编译生成的.so文件作为程序的一部分,在运行发生异常时同样会造成程序崩溃.不同于Java代码异常造成的程序崩溃,在NDK的异常发生时,程序在Android设备上都会立即退出,即通常所说的闪退,而不会弹出“程序xxx无响应,是否立即关闭”之类的提示框. NDK是使用C/C++来进行开发的,熟悉C/C++的程序员都知道,指针和内存管理是最重要也是最容易出问题的地方,稍有不慎就会遇到诸如内存无效访 问.无效对象.内存泄露.堆栈溢出等常见的问题,最后