Android崩溃处理
2015-06-03 00:00
399 查看
我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程序崩溃。但没有一个程序员能保证自己写的程序绝对不会出现异常崩溃。特别是当你用户数达到一定数量级后,你也更容易发现应用不同情况下的崩溃。
对于还没发布的应用程序,我们可以通过测试、分析Log的方法来收集崩溃信息。但对已经发布的程序,我们不可能让用户去查看崩溃信息然后再反馈给开发者。所以,设计一个对于小白用户都可以轻松实现反馈的应用就显得很重要了。我这里结合我自己写的一个Demo,来分析从崩溃开始到崩溃信息反馈到我们服务器,我们程序都需要做什么。
当我们的程序因未捕获的异常而突然终止时,系统会调用处理程序的接口UncaughtExceptionHandler。如果我们想处理未被程序正常捕获的异常,只需实现这个接口里的uncaughtException方法,uncaughtException方法回传了Thread和Throwable两个参数。通过这两个参数,我们来对异常进行我们需要的处理。
综上,我对异常处理方式的思路是这样的:
1.我们需要首先收集产生崩溃的手机信息,因为Android的样机种类繁多,很可能某些特定机型下会产生莫名的bug。2.将手机的信息和崩溃信息写入文件系统中。这样方便后续处理。3.崩溃的应用需要可以自动重启。重启的页面设置成反馈页面,询问用户是否需要上传崩溃报告。4.用户同意后,即将2中写入的崩溃信息文件发送到自己的服务器。
通过上面的步骤,我们就可以写出大概的伪代码:
[Java]纯文本查看复制代码
?
最后,在重启页面通过AsyncTask将崩溃信息上传服务器。
有了以上思路,我们一步一步的写出每个伪函数的具体代码。
1.收集手机的信息:
[Java]纯文本查看复制代码
?
2.崩溃和手机信息写入文件:
[Java]纯文本查看复制代码
?
3.重启应用:
[Java]纯文本查看复制代码
?
4.上传崩溃
应用重启后来到的是SendCrashActivity界面,在这里我设置了一个简单的按钮,点击后即可上传崩溃信息。代码比较多,这里列一个比较有用的上传方法吧:
[Java]纯文本查看复制代码
?
对于还没发布的应用程序,我们可以通过测试、分析Log的方法来收集崩溃信息。但对已经发布的程序,我们不可能让用户去查看崩溃信息然后再反馈给开发者。所以,设计一个对于小白用户都可以轻松实现反馈的应用就显得很重要了。我这里结合我自己写的一个Demo,来分析从崩溃开始到崩溃信息反馈到我们服务器,我们程序都需要做什么。
当我们的程序因未捕获的异常而突然终止时,系统会调用处理程序的接口UncaughtExceptionHandler。如果我们想处理未被程序正常捕获的异常,只需实现这个接口里的uncaughtException方法,uncaughtException方法回传了Thread和Throwable两个参数。通过这两个参数,我们来对异常进行我们需要的处理。
综上,我对异常处理方式的思路是这样的:
1.我们需要首先收集产生崩溃的手机信息,因为Android的样机种类繁多,很可能某些特定机型下会产生莫名的bug。2.将手机的信息和崩溃信息写入文件系统中。这样方便后续处理。3.崩溃的应用需要可以自动重启。重启的页面设置成反馈页面,询问用户是否需要上传崩溃报告。4.用户同意后,即将2中写入的崩溃信息文件发送到自己的服务器。
通过上面的步骤,我们就可以写出大概的伪代码:
[Java]纯文本查看复制代码
1 2 3 4 5 |
有了以上思路,我们一步一步的写出每个伪函数的具体代码。
1.收集手机的信息:
[Java]纯文本查看复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
[Java]纯文本查看复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
[Java]纯文本查看复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 |
应用重启后来到的是SendCrashActivity界面,在这里我设置了一个简单的按钮,点击后即可上传崩溃信息。代码比较多,这里列一个比较有用的上传方法吧:
[Java]纯文本查看复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |