转载:
http://www.cnblogs.com/lemonczy/archive/2011/11/17/2252245.html
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; } }
相关推荐
Android捕获全局异常并写日志保存到sd卡,捕获异常消息后输出这个消息,可避免APP强制退出,抛出NullPointException玩玩哈,捕获全局异常是因为有的异常我们捕获不到,捕获时我们采用同步方法,以免单例多线程环境下...
Toast.makeText(context, "异常已记录到SD卡", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } } } ``` 2. 在应用程序的主Activity或Application类中设置全局异常处理器: ``...
写操作需要先将数据暂存到STM32的内部缓冲区,然后通过SPI接口发送给SD卡。写入过程中,SD卡会反馈写保护状态和写操作完成情况。 5. **错误处理**:在读写过程中,需要对各种可能的错误进行处理,如超时、CRC错误、...
此外,由于Android系统的安全性和隐私政策,使用SD卡存储敏感数据(如用户信息或应用内部数据)可能并不理想。在实际开发中,通常会考虑使用更安全的途径,如数据库、内部存储或云服务来存储和管理异常信息。 总的...
总结来说,通过自定义Crash Handler,我们可以有效地收集和处理Android应用的异常信息,将其保存到SD卡,然后上传到服务器,从而提高故障排查的效率,提升应用的稳定性。同时,也要注意处理过程中的数据安全和隐私...
4. **错误处理**:测试程序会模拟各种异常情况,如突然断电、电源波动等,以检测SD卡和读卡器的错误恢复能力。 5. **多线程/并发访问**:在现代多任务环境中,测试程序会测试多个线程或进程同时读写SD卡时的表现,...
在C#编程环境中,开发人员有时需要访问硬件设备的低级别功能,如读写SD卡的扇区。本文将深入探讨如何使用C#实现对SD卡扇区的读写操作,以及背后的原理和API使用。 首先,理解SD卡扇区的基本概念是至关重要的。在...
ARM处理器的低功耗特性使其非常适合在嵌入式设备中处理SD卡读写任务。在初始化阶段,代码会设置SD卡的时钟、初始化序列、检测SD卡类型(如SD、SDHC或SDXC),并获取卡的容量信息。 PC机上的SD卡读写通常通过USB接口...
6. **进度显示与错误处理**:在下载过程中,可以显示下载进度,同时对网络中断、SD卡写入失败等情况进行异常处理。 7. **完成与关闭**:下载完成后,关闭文件并释放所有资源,如网络连接和文件句柄。 在整个过程中...
在IT行业中,SD卡(Secure Digital Card)是一种广泛使用的存储设备,特别适用于移动设备如智能手机、数码相机和便携式媒体播放器等。本篇主要介绍如何编写一个针对SD卡进行读写操作的程序,以及涉及到的相关技术...
5. 异常处理:设计错误检测和恢复机制,以应对网络断开、SD卡故障等情况。 通过深入理解这些技术点和相关代码,可以有效地实现基于GD32的网络存储SD卡项目,创建一个能接收并存储远程数据的智能系统。
3. 异常处理:考虑到硬件可能出现的故障,如电源问题、数据错误等,需要在程序中加入适当的异常处理机制。 五、性能优化 1. 数据缓冲:为了提高读写速度,可以在单片机内存中设置缓冲区,批量处理数据。 2. 并行...
8. **异常情况处理**:例如,当SD卡未被正确安装或损坏时,驱动程序应能适当地通知上层应用。 9. **兼容性**:SD卡有多种类型(如SD、SDHC、SDXC)和速度等级,驱动程序需兼容这些差异。 10. **性能优化**:通过...
而SD卡则是一种常见的存储介质,广泛用于移动设备和嵌入式系统中。 在LPC210x上实现SD卡的读写,首先要理解LPC210x的接口特性。LPC210x通常通过SPI(Serial Peripheral Interface)或SD/MMC接口与SD卡通信。SPI是一...
7. **编程实现**:在单片机中,SD卡读写程序通常使用C语言编写,结合硬件库函数来驱动SPI接口和处理SD卡命令。例如,STM32系列单片机可以使用HAL或LL库,而Arduino平台则有相应的SD库。 8. **测试与调试**:完成...
在IT领域,SD卡(Secure Digital Card)是一种广泛使用的存储设备,主要应用于移动设备、数码相机、便携式媒体播放器等。FAT(File Allocation Table)文件系统是早期计算机和移动设备常用的文件管理系统,它负责...
在FPGA MPSoC上,我们通常会设计一个控制器来实现SD卡接口,这个控制器需要处理SD卡命令序列,例如CMD0复位,CMD8验证电压,CMD55和ACMD41初始化,以及后续的读写命令。 项目中可能包含了以下文件: 1. **主机驱动...
AVR单片机读写SD卡是嵌入式系统中常见的功能,特别是在需要大量存储数据的应用中,如数据记录、物联网设备等。AVR单片机是由Atmel(现已被Microchip Technology收购)开发的一系列低功耗、高性能的8位微控制器。SD卡...
例如,SD卡可能返回各种错误状态,如CRC错误、命令超时、非法命令等,我们需要编写适当的错误处理代码来捕获并处理这些异常。此外,为了提高效率,可以使用中断驱动的SPI通信,当数据传输完成时,微控制器会自动触发...
单片机读写U盘和SD卡是嵌入式系统中常见的数据存储操作,尤其在AVR单片机上实现这些功能对许多项目至关重要。AVR单片机是由Atmel公司(现已被Microchip Technology收购)开发的一系列高性能、低功耗的8位微控制器,...