JavaShuo
栏目
标签
Android application捕获崩溃异常
时间 2019-11-06
标签
android
application
捕获
崩溃
异常
栏目
Android
繁體版
原文
原文链接
Java代码
我的笔记:
通用 application
1
、收集全部 avtivity 用于完全退出应用
2
、捕获崩溃异常,保存错误日志,并重启应用
public
class
HKBaseApplication
extends
Application {
// activity对象列表,用于activity统一管理
private
List<Activity> activityList;
// 异常捕获
protected
boolean
isNeedCaughtExeption =
true
;
// 是否捕获未知异常
private
PendingIntent restartIntent;
private
MyUncaughtExceptionHandler uncaughtExceptionHandler;
private
String packgeName;
@Override
public
void
onCreate() {
super
.onCreate();
activityList =
new
ArrayList<Activity>();
packgeName = getPackageName();
if
(isNeedCaughtExeption) {
cauchException();
}
}
// -------------------异常捕获-----捕获异常后重启系统-----------------//
private
void
cauchException() {
Intent intent =
new
Intent();
// 参数1:包名,参数2:程序入口的activity
intent.setClassName(packgeName, packgeName +
".LoginActivity"
);
restartIntent = PendingIntent.getActivity(getApplicationContext(), -
1
, intent,
Intent.FLAG_ACTIVITY_NEW_TASK);
// 程序崩溃时触发线程
uncaughtExceptionHandler =
new
MyUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler);
}
// 建立服务用于捕获崩溃异常
private
class
MyUncaughtExceptionHandler
implements
UncaughtExceptionHandler {
@Override
public
void
uncaughtException(Thread thread, Throwable ex) {
// 保存错误日志
saveCatchInfo2File(ex);
// 1秒钟后重启应用
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() +
1000
, restartIntent);
// 关闭当前应用
finishAllActivity();
finishProgram();
}
};
/**
* 保存错误信息到文件中
*
* @return 返回文件名称
*/
private
String saveCatchInfo2File(Throwable ex) {
Writer writer =
new
StringWriter();
PrintWriter printWriter =
new
PrintWriter(writer);
ex.printStackTrace(printWriter);
Throwable cause = ex.getCause();
while
(cause !=
null
) {
cause.printStackTrace(printWriter);
cause = cause.getCause();
}
printWriter.close();
String sb = writer.toString();
try
{
DateFormat formatter =
new
SimpleDateFormat(
"yyyy-MM-dd-HH-mm-ss"
);
String time = formatter.format(
new
Date());
String fileName = time +
".txt"
;
System.out.println(
"fileName:"
+ fileName);
if
(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String filePath = Environment.getExternalStorageDirectory() +
"/HKDownload/"
+ packgeName
+
"/crash/"
;
File dir =
new
File(filePath);
if
(!dir.exists()) {
if
(!dir.mkdirs()) {
// 建立目录失败: 通常是由于SD卡被拔出了
return
""
;
}
}
System.out.println(
"filePath + fileName:"
+ filePath + fileName);
FileOutputStream fos =
new
FileOutputStream(filePath + fileName);
fos.write(sb.getBytes());
fos.close();
//文件保存完了以后,在应用下次启动的时候去检查错误日志,发现新的错误日志,就发送给开发者
}
return
fileName;
}
catch
(Exception e) {
System.out.println(
"an error occured while writing file..."
+ e.getMessage());
}
return
null
;
}
// ------------------------------activity管理-----------------------//
// activity管理:从列表中移除activity
public
void
removeActivity(Activity activity) {
activityList.remove(activity);
}
// activity管理:添加activity到列表
public
void
addActivity(Activity activity) {
activityList.add(activity);
}
// activity管理:结束全部activity
public
void
finishAllActivity() {
for
(Activity activity : activityList) {
if
(
null
!= activity) {
activity.finish();
}
}
}
// 结束线程,通常与finishAllActivity()一块儿使用
// 例如: finishAllActivity;finishProgram();
public
void
finishProgram() {
android.os.Process.killProcess(android.os.Process.myPid());
}
}
来源:
http://zheyiw.iteye.com/blog/1670990
来自为知笔记(Wiz)
相关文章
1.
Flutter异常崩溃捕捉
2.
Android应用崩溃后异常捕获并重启
3.
Android 捕获异常并在应用崩溃后重启应用
4.
APP崩溃的异常捕捉
5.
Flutter异常捕获和Crash崩溃日志收集
6.
Android 应用崩溃捕获工具 xCrash
7.
panic 捕获及 throw 崩溃
8.
异常处理 - Native 层的崩溃捕获机制及实现
9.
Android 异常捕获
10.
WPF异常捕获,并使程序不崩溃!
更多相关文章...
•
PHP 7 异常
-
PHP 7 新特性
•
C# 异常处理
-
C#教程
•
常用的分布式事务解决方案
•
Kotlin学习(一)基本语法
相关标签/搜索
崩溃
捕获
application
异常
常见异常
Mybatis异常
Android
MyBatis教程
PHP 7 新特性
PHP教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
gitlab新建分支后,android studio拿不到
2.
Android Wi-Fi 连接/断开时间
3.
今日头条面试题+答案,花点时间看看!
4.
小程序时间组件的开发
5.
小程序学习系列一
6.
[微信小程序] 微信小程序学习(一)——起步
7.
硬件
8.
C3盒模型以及他出现的必要性和圆角边框/前端三
9.
DELL戴尔笔记本关闭触摸板触控板WIN10
10.
Java的long和double类型的赋值操作为什么不是原子性的?
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
Flutter异常崩溃捕捉
2.
Android应用崩溃后异常捕获并重启
3.
Android 捕获异常并在应用崩溃后重启应用
4.
APP崩溃的异常捕捉
5.
Flutter异常捕获和Crash崩溃日志收集
6.
Android 应用崩溃捕获工具 xCrash
7.
panic 捕获及 throw 崩溃
8.
异常处理 - Native 层的崩溃捕获机制及实现
9.
Android 异常捕获
10.
WPF异常捕获,并使程序不崩溃!
>>更多相关文章<<