设为首页 加入收藏

TOP

Android之崩溃日志管理(原创)(一)
2019-08-30 06:18:55 】 浏览:117
Tags:Android 崩溃 日志 管理 原创

文章大纲

一、Android崩溃日志管理简介
二、崩溃日志管理实战
三、项目源码下载

 

一、Android崩溃日志管理简介

1. 什么是android崩溃日志管理

??开发中有些地方未注意可能造成异常抛出未能caught到,然后弹出系统对话框强制退出。这种交互不好,而且开发者也不能及时获取到底哪里出问题。因此我们可以使用android的UncaughtExceptionHandler来处理这种异常。

2. 操作逻辑

用户端(出现崩溃)
??我们会封装一个通用的jar包,该jar包包括日志打印、捕获异常信息逻辑、网络传输、设置Debug和Release模式、获取本机的相关信息等,当出现异常时,将异常信息以文件方式保存在用户手机中,并且发送到后台,当后台接收成功时,自动删除用户手机的崩溃信息文件,若接收失败,在下次发生崩溃时,将历史发送失败的崩溃一同发送。

接收端(后台)
??我们会编写一个地址,用于接收异常的具体信息,并储存在本地文件中,以此作为日志进行管理。

二、崩溃日志管理实战

1. 后台端

??在该实战中,我以简单的servlet进行讲解,实际项目中,可以以ssm或spring boot等框架进行操作。

/** * 接收崩溃信息,并进行打印(实际项目中,需要以文件形式归档) * @author wxc * */ public class Test extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取客户端传送过来的信息流 BufferedReader in=new BufferedReader(new InputStreamReader(request.getInputStream())); StringBuilder sb = new StringBuilder(); String line = null; while ((line = in.readLine()) != null) { //将信息流进行打印 System.out.println(line); } } } 

2. 客户端通用项目

网络请求相关的配置管理类:HttpManager.java

/** * * 网络请求相关的配置管理 * * @author 吴晓畅 * */ public class HttpManager { private static final int SET_CONNECTION_TIMEOUT = 5 * 1000; private static final int SET_SOCKET_TIMEOUT = 20 * 1000; private static final String BOUNDARY = getBoundry();// UUID.randomUUID().toString(); private static final String MP_BOUNDARY = "--" + BOUNDARY; private static final String END_MP_BOUNDARY = "--" + BOUNDARY + "--"; private static final String LINEND = "\r\n"; private static final String CHARSET = "UTF-8"; public static String uploadFile(String url, HttpParameters params, File logFile) throws IOException{ HttpClient client = getHttpClient(); HttpPost post = new HttpPost(url); ByteArrayOutputStream bos = null; FileInputStream logFileInputStream = null; String result = null; try { bos = new ByteArrayOutputStream(); if(params != null){ String key = ""; for (int i = 0; i < params.size(); i++) { key = params.getKey(i); StringBuilder temp = new StringBuilder(10); temp.setLength(0); temp.append(MP_BOUNDARY).append(LINEND); temp.append("content-disposition: form-data; name=\"").append(key) .append("\"").append(LINEND + LINEND); temp.append(params.getValue(key)).append(LINEND); bos.write(temp.toString().getBytes()); } } StringBuilder temp = new StringBuilder(); temp.append(MP_BOUNDARY).append(LINEND); temp.append( "content-disposition: form-data; name=\"logfile\"; filename=\"") .append(logFile.getName()).append("\"").append(LINEND); temp.append("Content-Type: application/octet-stream; charset=utf-8").append(LINEND + LINEND); bos.write(temp.toString().getBytes()); logFileInputStream = new FileInputStream(logFile); byte[] buffer = new byte[1024*8];//8k while(true){ int count = logFileInputStream.read(buffer); if(count == -1){ break; } bos.write(buffer, 0, count); } bos.write((LINEND+LINEND).getBytes()); bos.write((END_MP_BOUNDARY+LINEND).getBytes()); ByteArrayEntity formEntity = new ByteArrayEntity(bos.toByteArray()); post.setEntity(formEntity); Http
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一起学Android之Http访问 下一篇Android之Realm详解(非原创)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目