Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2a8ed49

Browse files
committed
调整异常处理
1 parent 758b228 commit 2a8ed49

File tree

2 files changed

+45
-35
lines changed

2 files changed

+45
-35
lines changed

app/src/main/java/com/github2136/android_utils/Appli.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.google.gson.ExclusionStrategy
1010
import com.google.gson.FieldAttributes
1111
import com.google.gson.GsonBuilder
1212
import java.util.*
13+
import kotlin.collections.HashMap
1314

1415
/**
1516
* Created by yb on 2018/10/31.
@@ -30,11 +31,17 @@ class Appli : Application() {
3031

3132
CrashHandler.getInstance(this, BuildConfig.DEBUG)
3233
.setCallback(object : CrashHandler.CrashHandlerCallback {
34+
override fun addParam(info: HashMap<String, String>) {
35+
info.put("p1", "1111")
36+
}
37+
3338
override fun finishAll() {
3439
this@Appli.finishAll()
3540
}
3641

37-
override fun submitLog(deviceInfo: Map<String, String>, exception: String) {
42+
override fun submitLog(info: Map<String, String>, exception: String) {
43+
Log.e("info", info.toString())
44+
Log.e("info", exception)
3845
}
3946
})
4047

utils/src/main/java/com/github2136/util/CrashHandler.kt

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,38 @@ import kotlin.concurrent.thread
1818
class CrashHandler private constructor(val application: Application, val debug: Boolean) : Thread.UncaughtExceptionHandler {
1919
// 系统默认的UncaughtException处理类
2020
private var mDefaultHandler: Thread.UncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
21-
private var sb: StringBuffer = StringBuffer()
22-
private var map: HashMap<String, String>
21+
private var info: HashMap<String, String> //设备及应用信息
2322
private var callback: CrashHandlerCallback? = null
2423

2524
init {
2625
// 设置该CrashHandler为程序的默认处理器
2726
Thread.setDefaultUncaughtExceptionHandler(this)
2827
//设施信息
29-
map = HashMap()
28+
info = HashMap()
3029
try {
3130
val mPackageManager = application.packageManager
3231
val mPackageInfo: PackageInfo = mPackageManager.getPackageInfo(application.packageName, PackageManager.GET_ACTIVITIES)
3332
//APP显示的版本名
34-
map[APP_VERSION_NAME] = mPackageInfo.versionName
33+
info[APP_VERSION_NAME] = mPackageInfo.versionName
3534
//APP的版本编号
3635
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
37-
map[APP_VERSION_CODE] = "${mPackageInfo.longVersionCode}"
36+
info[APP_VERSION_CODE] = "${mPackageInfo.longVersionCode}"
3837
} else {
39-
map[APP_VERSION_CODE] = "${mPackageInfo.versionCode}"
38+
info[APP_VERSION_CODE] = "${mPackageInfo.versionCode}"
4039
}
4140
} catch (e: PackageManager.NameNotFoundException) {
4241
e.printStackTrace()
4342
}
4443

4544
//Android版本Int
46-
map[SYS_RELEASE_CODE] = "${Build.VERSION.SDK_INT}"
45+
info[SYS_RELEASE_CODE] = "${Build.VERSION.SDK_INT}"
4746
//Android显示的版本号
48-
map[SYS_RELEASE_NAME] = Build.VERSION.RELEASE
47+
info[SYS_RELEASE_NAME] = Build.VERSION.RELEASE
4948
//ABI
5049
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
51-
map[ABIS] = Build.SUPPORTED_ABIS?.contentToString() ?: ""
50+
info[ABIS] = Build.SUPPORTED_ABIS?.contentToString() ?: ""
5251
} else {
53-
map[ABIS] = mutableListOf<String>().apply {
52+
info[ABIS] = mutableListOf<String>().apply {
5453
if (Build.CPU_ABI.isNotEmpty()) {
5554
add(Build.CPU_ABI)
5655
}
@@ -62,30 +61,30 @@ class CrashHandler private constructor(val application: Application, val debug:
6261
}
6362
}
6463
//主板名称
65-
map[BOARD] = Build.BOARD
64+
info[BOARD] = Build.BOARD
6665
//手机品牌
67-
map[BRAND] = Build.BRAND
66+
info[BRAND] = Build.BRAND
6867
//工业品设计外观名称,名称没什么规律
69-
map[DEVICE] = Build.DEVICE
68+
info[DEVICE] = Build.DEVICE
7069
//显示给用户的名称
71-
map[DISPLAY] = Build.DISPLAY
70+
info[DISPLAY] = Build.DISPLAY
7271
//设备指纹,由厂商、型号、等内容组成的字符,一般同一型号同一系统手机这个值相同
73-
map[FINGERPRINT] = Build.FINGERPRINT
72+
info[FINGERPRINT] = Build.FINGERPRINT
7473
//硬件名称,一般为CPU名称
75-
map[HARDWARE] = Build.HARDWARE
74+
info[HARDWARE] = Build.HARDWARE
7675
//变更列表编号,可能是品牌和设备名
77-
map[ID] = Build.ID
76+
info[ID] = Build.ID
7877
//硬件制造商
79-
map[MANUFACTURER] = Build.MANUFACTURER
78+
info[MANUFACTURER] = Build.MANUFACTURER
8079
//产品具体型号
81-
map[MODEL] = Build.MODEL
80+
info[MODEL] = Build.MODEL
8281
}
8382

8483
override fun uncaughtException(t: Thread?, e: Throwable?) {
85-
e?.let {
86-
saveException(application, it)
87-
}
88-
callback?.submitLog(map, sb.toString())
84+
val exception = e?.let { obtainExceptionInfo(it) } ?: ""
85+
callback?.addParam(info)
86+
saveException(exception)
87+
callback?.submitLog(info, exception)
8988
if (debug) {
9089
mDefaultHandler.uncaughtException(t, e)
9190
} else {
@@ -107,18 +106,12 @@ class CrashHandler private constructor(val application: Application, val debug:
107106
/**
108107
* 保存log
109108
*/
110-
private fun saveException(application: Application, ex: Throwable) {
111-
val sb = getLog(ex)
109+
private fun saveException(ex: String) {
110+
val sb = StringBuffer()
111+
info.map { entry -> sb.append(entry.key).append(" = ").append(entry.value).append("\n") }
112112
val filename = FileUtil.createFileName("log", ".txt")
113113
//存储至外部私有目录
114-
File(FileUtil.getExternalStoragePrivateLogPath(application), filename).writeText(sb.toString())
115-
}
116-
117-
private fun getLog(ex: Throwable): StringBuffer {
118-
sb = StringBuffer()
119-
map.map { entry -> sb.append(entry.key).append(" = ").append(entry.value).append("\n") }
120-
sb.append(obtainExceptionInfo(ex))
121-
return sb
114+
File(FileUtil.getExternalStoragePrivateLogPath(application), filename).writeText(sb.toString() + ex)
122115
}
123116

124117
/**
@@ -137,9 +130,19 @@ class CrashHandler private constructor(val application: Application, val debug:
137130
}
138131

139132
interface CrashHandlerCallback {
133+
/**
134+
* 添加KV参数
135+
*/
136+
fun addParam(info: HashMap<String, String>)
137+
/**
138+
* 结束所有界面
139+
*/
140140
fun finishAll()
141141

142-
fun submitLog(deviceInfo: Map<String, String>, exception: String)
142+
/**
143+
* 提交保存异常
144+
*/
145+
fun submitLog(info: Map<String, String>, exception: String)
143146
}
144147

145148
companion object {

0 commit comments

Comments
 (0)