`

异常处理写到SD卡

 
阅读更多

转载:

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卡.rar

    Android捕获全局异常并写日志保存到sd卡,捕获异常消息后输出这个消息,可避免APP强制退出,抛出NullPointException玩玩哈,捕获全局异常是因为有的异常我们捕获不到,捕获时我们采用同步方法,以免单例多线程环境下...

    捕获异常,sd卡写出日志

    Toast.makeText(context, "异常已记录到SD卡", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } } } ``` 2. 在应用程序的主Activity或Application类中设置全局异常处理器: ``...

    这是基于stm32的SD卡读写读写程序

    写操作需要先将数据暂存到STM32的内部缓冲区,然后通过SPI接口发送给SD卡。写入过程中,SD卡会反馈写保护状态和写操作完成情况。 5. **错误处理**:在读写过程中,需要对各种可能的错误进行处理,如超时、CRC错误、...

    android异常捕获,存在sd卡中

    此外,由于Android系统的安全性和隐私政策,使用SD卡存储敏感数据(如用户信息或应用内部数据)可能并不理想。在实际开发中,通常会考虑使用更安全的途径,如数据库、内部存储或云服务来存储和管理异常信息。 总的...

    Android crash异常信息保存到SD卡中并上传到服务器

    总结来说,通过自定义Crash Handler,我们可以有效地收集和处理Android应用的异常信息,将其保存到SD卡,然后上传到服务器,从而提高故障排查的效率,提升应用的稳定性。同时,也要注意处理过程中的数据安全和隐私...

    SD卡文件读写测试程序

    4. **错误处理**:测试程序会模拟各种异常情况,如突然断电、电源波动等,以检测SD卡和读卡器的错误恢复能力。 5. **多线程/并发访问**:在现代多任务环境中,测试程序会测试多个线程或进程同时读写SD卡时的表现,...

    C#实现对SD卡扇区的读写

    在C#编程环境中,开发人员有时需要访问硬件设备的低级别功能,如读写SD卡的扇区。本文将深入探讨如何使用C#实现对SD卡扇区的读写操作,以及背后的原理和API使用。 首先,理解SD卡扇区的基本概念是至关重要的。在...

    ARM和PC下SD卡读写模块源码

    ARM处理器的低功耗特性使其非常适合在嵌入式设备中处理SD卡读写任务。在初始化阶段,代码会设置SD卡的时钟、初始化序列、检测SD卡类型(如SD、SDHC或SDXC),并获取卡的容量信息。 PC机上的SD卡读写通常通过USB接口...

    rtthread + STM32F407VE + esp8266 +SD卡 从网络下载文件存到SD卡中

    6. **进度显示与错误处理**:在下载过程中,可以显示下载进度,同时对网络中断、SD卡写入失败等情况进行异常处理。 7. **完成与关闭**:下载完成后,关闭文件并释放所有资源,如网络连接和文件句柄。 在整个过程中...

    FPGA MPSoC_XCZU2EG实现SD卡读写数据(VITIS实现).zip

    在FPGA MPSoC上,我们通常会设计一个控制器来实现SD卡接口,这个控制器需要处理SD卡命令序列,例如CMD0复位,CMD8验证电压,CMD55和ACMD41初始化,以及后续的读写命令。 项目中可能包含了以下文件: 1. **主机驱动...

    SD卡读写程序

    在IT行业中,SD卡(Secure Digital Card)是一种广泛使用的存储设备,特别适用于移动设备如智能手机、数码相机和便携式媒体播放器等。本篇主要介绍如何编写一个针对SD卡进行读写操作的程序,以及涉及到的相关技术...

    基于GD32的网络存储SD卡

    5. 异常处理:设计错误检测和恢复机制,以应对网络断开、SD卡故障等情况。 通过深入理解这些技术点和相关代码,可以有效地实现基于GD32的网络存储SD卡项目,创建一个能接收并存储远程数据的智能系统。

    单片机读写U盘&sd卡开发方案

    3. 异常处理:考虑到硬件可能出现的故障,如电源问题、数据错误等,需要在程序中加入适当的异常处理机制。 五、性能优化 1. 数据缓冲:为了提高读写速度,可以在单片机内存中设置缓冲区,批量处理数据。 2. 并行...

    SD卡SPI模式读写驱动程序

    8. **异常情况处理**:例如,当SD卡未被正确安装或损坏时,驱动程序应能适当地通知上层应用。 9. **兼容性**:SD卡有多种类型(如SD、SDHC、SDXC)和速度等级,驱动程序需兼容这些差异。 10. **性能优化**:通过...

    LPC210x读写SD卡

    而SD卡则是一种常见的存储介质,广泛用于移动设备和嵌入式系统中。 在LPC210x上实现SD卡的读写,首先要理解LPC210x的接口特性。LPC210x通常通过SPI(Serial Peripheral Interface)或SD/MMC接口与SD卡通信。SPI是一...

    单片机SD卡读写程序.

    7. **编程实现**:在单片机中,SD卡读写程序通常使用C语言编写,结合硬件库函数来驱动SPI接口和处理SD卡命令。例如,STM32系列单片机可以使用HAL或LL库,而Arduino平台则有相应的SD库。 8. **测试与调试**:完成...

    SD卡读写测试成功.rar_SD卡 FAT_SD卡读写测试_fat_sd卡读写_读写SD

    在IT领域,SD卡(Secure Digital Card)是一种广泛使用的存储设备,主要应用于移动设备、数码相机、便携式媒体播放器等。FAT(File Allocation Table)文件系统是早期计算机和移动设备常用的文件管理系统,它负责...

    AVR单片机读写SD卡

    AVR单片机读写SD卡是嵌入式系统中常见的功能,特别是在需要大量存储数据的应用中,如数据记录、物联网设备等。AVR单片机是由Atmel(现已被Microchip Technology收购)开发的一系列低功耗、高性能的8位微控制器。SD卡...

    LPC2478读写SD卡的例子。

    例如,SD卡可能返回各种错误状态,如CRC错误、命令超时、非法命令等,我们需要编写适当的错误处理代码来捕获并处理这些异常。此外,为了提高效率,可以使用中断驱动的SPI通信,当数据传输完成时,微控制器会自动触发...

    单片机读写U盘SD卡

    单片机读写U盘和SD卡是嵌入式系统中常见的数据存储操作,尤其在AVR单片机上实现这些功能对许多项目至关重要。AVR单片机是由Atmel公司(现已被Microchip Technology收购)开发的一系列高性能、低功耗的8位微控制器,...

Global site tag (gtag.js) - Google Analytics