iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 如何收集已发布程序的崩溃信息
  • 420
分享到

Android 如何收集已发布程序的崩溃信息

程序Android 2022-06-06 10:06:16 420人浏览 八月长安
摘要

我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程序崩溃。不过理想是丰满的,现实是骨感的。没有一个程序员能保证自己写的程序绝对不会出现异常崩溃。

我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程序崩溃。不过理想是丰满的,现实是骨感的。没有一个程序员能保证自己写的程序绝对不会出现异常崩溃。特别是针对用户数达到几十万几百万的程序,当你用户数达到一定数量级后,就算你的程序出现个别异常崩溃情况也不用惊讶。
既然我们写的程序都有可能发生异常崩溃,如果是还没发布的程序,我们可以通过测试抓取Log来分析。不过针对已经发布的程序,我们没法重现现象,所以让用户反馈程序异常信息就很重要。下面我们说说如何收集程序运行过程的异常信息。

1、Android异常捕获接口
代码如下:
//当线程因未捕获的异常而突然终止时,调用处理程序的接口
static interface UncaughtExceptionHandler

2、设置线程捕获异常
从上面的接口我们可以看到,这个接口是针对线程来说,也就是说我们如果需要监控某个线程运行情况,只要把这个接口实现了,然后把监控方法设置到具体的线程里面即可。一般来说,我们最需要监控的就是我们的UI线程也就是主线程。
代码如下:
//设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

3、UncaughtExceptionHandler 实例
代码如下:
class MythouCrashHandler implements UncaughtExceptionHandler
{
    private static final String TAG = "MythouCrashHandler---->";
    private UncaughtExceptionHandler defaultUEH;
  //构造函数,获取默认的处理方法
    public MythouCrashHandler()
    {
        this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
    }
  //这个接口必须重写,用来处理我们的异常信息
    @Override
    public void uncaughtException(Thread thread, Throwable ex)
    {
        final Writer result = new StringWriter();
        final PrintWriter printWriter = new PrintWriter(result);
     //获取跟踪的栈信息,除了系统栈信息,还把手机型号、系统版本、编译版本的唯一标示
        StackTraceElement[] trace = ex.getStackTrace();
        StackTraceElement[] trace2 = new StackTraceElement[trace.length+3];
        System.arraycopy(trace, 0, trace2, 0, trace.length);
        trace2[trace.length+0] = new StackTraceElement("Android", "MODEL", android.os.Build.MODEL, -1);
        trace2[trace.length+1] = new StackTraceElement("Android", "VERSION", android.os.Build.VERSION.RELEASE, -1);
        trace2[trace.length+2] = new StackTraceElement("Android", "FINGERPRINT", android.os.Build.FINGERPRINT, -1);
    //追加信息,因为后面会回调默认的处理方法
        ex.setStackTrace(trace2);
        ex.printStackTrace(printWriter);
     //把上面获取的堆栈信息转为字符串,打印出来
        String stacktrace = result.toString();
        printWriter.close();
        Log.e(TAG, stacktrace);
        //这里把刚才异常堆栈信息写入SD卡的Log日志里面
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
        {
            String sdcardPath = Environment.getExternalStorageDirectory().getPath();
            writeLog(stacktrace, sdcardPath + "/mythou");
        }
        defaultUEH.uncaughtException(thread, ex);
    }
  //写入Log信息的方法,写入到SD卡里面
    private void writeLog(String log, String name)
    {
        CharSequence timestamp = DateFORMat.format("yyyyMMdd_kkmmss", System.currentTimeMillis());
        String filename = name + "_" + timestamp + ".log";
        try
        {
            FileOutputStream stream = new FileOutputStream(filename);
            OutputStreamWriter output = new OutputStreamWriter(stream);
            BufferedWriter bw = new BufferedWriter(output);
       //写入相关Log到文件
            bw.write(log);
            bw.newLine();
            bw.close();
            output.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

上面就是实现了获取处理跟踪信息的方法,上面的方法是参照VLC的异常处理机制编写的。做了一些简单修改。不过上面只是获取了异常信息,如果程序安装到用户机器上,我们没法获取到这些信息,总不能让用户把机器拿过来给你,然后你把Log拷贝出来吧。(这个我以前做嵌入式的时候到试过,让客户把机器拿过来,拷贝里面的Log,那时候做的机器无法联网。现在想起来都纠结,O(∩_∩)O哈哈~) 为了不再纠结,我们需要一个可以把Log发送到我们服务器的功能,下面是把一个服务信息发送到我们指定服务器功能。
3、通过网络发送Log
代码如下:
   public class SendCrashLog extends AsyncTask<String, String, Boolean>
    {
        public SendCrashLog() { }
        @Override
        protected Boolean doInBackground(String... params)
        {
            if (params[0].length() == 0)
                return false;
            HttpClient httpClient = new DefaultHttpClient();
       //你的服务器,这里只是举个例子。把异常信息当作http请求发送到服务器
            HttpPost httpPost = new HttpPost("http://www.mythou/getlog.PHP");
       //这里把相关的异常信息转为http post请求的数据参数
            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                nameValuePairs.add(new BasicNameValuePair("model", params[0]));
                nameValuePairs.add(new BasicNameValuePair("device", params[1]));
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
         //发送相关请求信息
                httpClient.execute(httpPost);
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                return false;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
            Log.d(TAG, "Device model sent.");
            return true;
        }
        @Override
        protected void onPostExecute(Boolean result) {
        }
    }

上面就是我上一篇文章讲的异步任务的使用,我们在异步任务里面编写了一个发送http请求的服务,用来把相关的异常信息发送到我们指定的服务器上面。这个需要你的服务器解析发送的http请求,这个难度不大,一般做个WEB的人都知道如何做。在上面的异常处理里面再调用这里的发送方法:
代码如下:
SendCrashLogsendLog = new SendCrashLog();
//刚才的异常信息字符串
sendLog .execute(stacktrace);

通过上面的方法就可以把异常信息发送到指定的服务器,也就可以跟踪客户使用软件的情况,方便我们修改程序的问题。当然这个信息收集一般都隐私和后台流量问题,这个需要在程序里面做点提示,免得背上流氓软件的骂名。

您可能感兴趣的文章:Android使用CrashHandler来获取应用的crash信息的方法Android CrashHandler编写自己的异常捕获的方法Android实现将应用崩溃信息发送给开发者并重启应用的方法Android实现自定义Crash handler记录崩溃信息实例代码


--结束END--

本文标题: Android 如何收集已发布程序的崩溃信息

本文链接: https://www.lsjlt.com/news/27419.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android ANR的信息收集过程是什么
    本篇内容介绍了“Android ANR的信息收集过程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. ANR场景无论是四大...
    99+
    2023-06-21
  • Android如何解决WebView多进程崩溃的问题
    小编给大家分享一下Android如何解决WebView多进程崩溃的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题在android 9.0系统上如果多个进程...
    99+
    2023-06-14
  • 如何发布微信小程序
    今天小编给大家分享一下如何发布微信小程序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。小程序的功能实现之后,经过一段时间地测...
    99+
    2023-06-19
  • 微信小程序如何发布
    这篇文章给大家分享的是有关微信小程序如何发布的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  一、微信小程序发布需要准备哪些材料资质工具  【注意】目前个人和组织都可以注册微信小程序了,如何不明白个人怎么注册小程...
    99+
    2023-06-26
  • C#开发中如何处理程序崩溃和死锁问题
    C#开发中如何处理程序崩溃和死锁问题,需要具体代码示例在C#开发过程中,程序崩溃和死锁问题是常见的挑战。处理这些问题是保证程序运行稳定和高效的关键,因此,本文将介绍如何处理程序崩溃和死锁问题,并提供一些具体的代码示例。程序崩溃问题处理程序崩...
    99+
    2023-10-22
    异常处理 崩溃恢复 死锁解决
  • 微信小程序开发如何发布上线
    这篇文章主要讲解了“微信小程序开发如何发布上线”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序开发如何发布上线”吧!第一步:搭开发环境首先,我们需要在本地搭建好微信小程序的开发环境。...
    99+
    2023-06-26
  • 微信小程序中如何上线发布
    这篇文章主要介绍了微信小程序中如何上线发布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。微信小程序中上线发布的流程:###一、先登录微信公众平台,在小程序栏目里注册获取app...
    99+
    2023-06-14
  • Android如何通过接收UDP消息改写程序配置
    今天就跟大家聊聊有关Android如何通过接收UDP消息改写程序配置,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android程序打包成APK发布后,如果有参数需要根据不同应用环境...
    99+
    2023-06-05
  • 小程序如何转化获得转发信息
    今天小编给大家分享一下小程序如何转化获得转发信息的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。  转发  用户在使用小游戏过...
    99+
    2023-06-26
  • 小程序开发如何获取用户信息
    这篇“小程序开发如何获取用户信息”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“小程序开发如何获取用户信息”文章吧。有两种获取...
    99+
    2023-06-26
  • 微信小程序开发中如何获取用户信息
    这篇文章主要为大家展示了微信小程序开发中如何获取用户信息,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“微信小程序开发中如何获取用户信息”这篇文章吧。wx.getUserInfo(OBJECT)获取...
    99+
    2023-06-26
  • 小程序开发中如何获取系统信息
    本文将为大家详细介绍“小程序开发中如何获取系统信息”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“小程序开发中如何获取系统信息”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知...
    99+
    2023-06-26
  • 小程序开发如何获取节点的相关信息
    本篇内容主要讲解“小程序开发如何获取节点的相关信息”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“小程序开发如何获取节点的相关信息”吧!获取节点的相关信息,需要获取的字段在fields中指定。返回...
    99+
    2023-06-26
  • C#开发中如何处理异常日志和错误信息的收集与分析
    C#开发中如何处理异常日志和错误信息的收集与分析引言:在软件开发过程中,我们经常会遇到各种异常和错误。为了及时发现并解决这些问题,我们需要在代码中实现异常日志和错误信息的收集与分析。本文将介绍如何在C#开发中处理异常日志和错误信息,并提供一...
    99+
    2023-10-22
    日志收集 异常处理 错误信息分析
  • 如何使用PHP开发微信小程序的任务接收功能?
    如何使用PHP开发微信小程序的任务接收功能?微信小程序的任务接收功能是一个非常实用的功能,它允许用户在小程序中发布任务,并由其他用户接收并进行处理。本文将介绍如何使用PHP进行开发,实现微信小程序的任务接收功能,并提供具体的代码示例。首先,...
    99+
    2023-10-27
    PHP 微信小程序 任务接收
  • 微信小程序的消息框如何实现
    这篇文章主要讲解了“微信小程序的消息框如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序的消息框如何实现”吧!wxml<import src="/dist/to...
    99+
    2023-06-26
  • 微信小程序开发中如何显示消息提示框
    本文将为大家详细介绍“微信小程序开发中如何显示消息提示框”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“微信小程序开发中如何显示消息提示框”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一...
    99+
    2023-06-26
  • Oracle 11g如何修改表级别的自动收集统计信息比率
    小编给大家分享一下Oracle 11g如何修改表级别的自动收集统计信息比率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • 微信小程序如何显示所在位置的信息
    今天小编给大家分享一下微信小程序如何显示所在位置的信息的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。假设我们指定了多个监控点...
    99+
    2023-06-19
  • 如何使用PHP实现微信小程序的任务发布功能?
    如何使用PHP实现微信小程序的任务发布功能?随着微信小程序的兴起,越来越多的开发者开始关注如何使用PHP来实现微信小程序的各种功能。本篇文章将重点介绍如何使用PHP来实现微信小程序的任务发布功能,并提供具体的代码示例。首先,要实现微信小程序...
    99+
    2023-10-28
    PHP 微信小程序 任务发布
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作