Android 自动记录异常信息至SD卡

public class MyCrashHandler implements UncaughtExceptionHandler {
	@SuppressWarnings("unused")
	private Context context;

	private static MyCrashHandler crashHandler = new MyCrashHandler();
	UncaughtExceptionHandler defaultExceptionHandler;

	private MyCrashHandler() {
	}

	public static MyCrashHandler getInstanceMyCrashHandler() {
		return crashHandler;
	}
	
	/**
	 * 初始化方法
	 * @param context 上下文对象
	 */
	public void init(Context context) {
		this.context = context;
		defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
		Thread.setDefaultUncaughtExceptionHandler(this);
	}

	/**
	 * 异常处理方法
	 * @Params Thread对象
	 * @param  Throwable对象
	 */
	@Override
	public void uncaughtException(Thread thread, Throwable ex) {
		if (!handleException(thread, ex) && defaultExceptionHandler != null) {
			defaultExceptionHandler.uncaughtException(thread, ex);
		}
	}

	// 程序异常处理方法
	private boolean handleException(Thread thread, Throwable ex) {
		StringBuilder sb = new StringBuilder();
		long startTimer = System.currentTimeMillis();
		SimpleDateFormat formatter = new SimpleDateFormat(
				"yyyy年MM月dd日   HH:mm:ss     ");
		Date firstDate = new Date(System.currentTimeMillis()); // 第一次创建文件,也就是开始日期
		String str = formatter.format(firstDate);
		sb.append(startTimer);
		//sb.append("\n");
		sb.append(str); // 把当前的日期写入到字符串中
		Writer writer = new StringWriter();
		PrintWriter pw = new PrintWriter(writer);
		ex.printStackTrace(pw);
		String errorresult = writer.toString();
		sb.append(errorresult);
		sb.append("\n");
		try {
			File fileDir = new File("/data/data/com.ebank/Ebank/");
			//File fileDir = new File("/sdcard/com.ebank/EBank/");
			if (!fileDir.exists()) {
				fileDir.mkdirs();
			}
			File files = new File(fileDir, "ebank.log");
			if (!files.exists()) {
				files.createNewFile();
			}
			FileOutputStream fileOutputStream = new FileOutputStream(files,
					true);
			fileOutputStream.write(sb.toString().getBytes());
			fileOutputStream.close();

			// 文件大小限制在1M,超过1M自动删除
			FileInputStream fileInputStream = new FileInputStream(files);
			int sizeK = fileInputStream.available() / 1024; // 单位是KB
			int totalSize = 1 * 1024;
			if (sizeK > totalSize) {
				boolean b = files.delete();
				if (b) {                      // 删除成功,重新创建一个文件
					@SuppressWarnings("unused")
					File filesTwo = new File(fileDir, "ebank.log");
					if (!files.exists()) {
						files.createNewFile();
					}
				} else {
					                       // 删除失败
					FileOutputStream fileOutputStream2 = new FileOutputStream(
							files);
					fileOutputStream2.write("  ".getBytes()); // 写入一个空格进去
				}
			}

			// 文件保存7天,过了7天自动删除
			FileReader fileReader = new FileReader(files);
			BufferedReader bufferedReader = new BufferedReader(fileReader);
			String firstLine = bufferedReader.readLine();
			long startTimerFile = Long.valueOf(firstLine.trim()); // 类型转换

			long endTimer = System.currentTimeMillis();
			long totalDay = 24 * 60 * 60 * 1000 * 7;
			final File f = files;
			TimerTask timerTask = new TimerTask() {
				@Override
				public void run() {
					try {
						boolean n = f.delete();
						if(n){
							File fileDirs = new File("/data/data/com.ebank/Ebank/");
							if (!fileDirs.exists()) {
								fileDirs.mkdirs();
							}
							File filess = new File(fileDirs, "ebank.log");
							if (!filess.exists()) {
								filess.createNewFile();
							}
						}else{
							                              // 删除失败
							FileOutputStream fileOutputStream2 = new FileOutputStream(f);
							fileOutputStream2.write("  ".getBytes());                     // 写入一个空格进去
						}
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}

				}
				
			};
			//定时器类的对象
			Timer timer = new Timer();
			if ((endTimer - startTimerFile) >= totalDay) {
				timer.schedule(timerTask, 1);                                            // 7天后执行
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		defaultExceptionHandler.uncaughtException(thread, ex);

		return true;
	}

}

 

posted on 2011-11-17 10:34  柠檬哥  阅读(884)  评论(0编辑  收藏  举报

导航