11
11
import java .io .StringWriter ;
12
12
import java .io .Writer ;
13
13
import java .lang .Thread .UncaughtExceptionHandler ;
14
+ import java .lang .ref .WeakReference ;
14
15
15
16
/**
16
17
* <pre>
23
24
public class CrashUtils implements Thread .UncaughtExceptionHandler {
24
25
25
26
private volatile static CrashUtils mInstance ;
26
- private Context mContext ;
27
27
private UncaughtExceptionHandler mHandler ;
28
28
private boolean mInitialized ;
29
+ private static String dir ;
30
+ private String versionName ;
31
+ private int versionCode ;
29
32
30
33
private CrashUtils () {
31
34
}
32
35
33
36
/**
34
37
* 获取单例
35
- * <p>在Application中初始化{@code CrashUtils.getInstance().getBuilder (this);}</p>
38
+ * <p>在Application中初始化{@code CrashUtils.getInstance().init (this);}</p>
36
39
*
37
40
* @return 单例
38
41
*/
@@ -50,22 +53,28 @@ public static CrashUtils getInstance() {
50
53
*
51
54
* @param context 上下文
52
55
*/
53
- public void init (Context context ) {
54
- if (mInitialized ) return ;
55
- mInitialized = true ;
56
- mContext = context ;
56
+ public boolean init (Context context ) {
57
+ if (mInitialized ) return true ;
58
+ if (Environment .MEDIA_MOUNTED .equals (Environment .getExternalStorageState ())) {
59
+ dir = context .getExternalCacheDir ().getPath ();
60
+ } else {
61
+ dir = context .getCacheDir ().getPath ();
62
+ }
63
+ try {
64
+ PackageInfo pi = context .getPackageManager ().getPackageInfo (context .getPackageName (), 0 );
65
+ versionName = pi .versionName ;
66
+ versionCode = pi .versionCode ;
67
+ } catch (PackageManager .NameNotFoundException e ) {
68
+ e .printStackTrace ();
69
+ return false ;
70
+ }
57
71
mHandler = Thread .getDefaultUncaughtExceptionHandler ();
58
72
Thread .setDefaultUncaughtExceptionHandler (this );
73
+ return mInitialized = true ;
59
74
}
60
75
61
76
@ Override
62
77
public void uncaughtException (Thread thread , Throwable throwable ) {
63
- String dir ;
64
- if (Environment .MEDIA_MOUNTED .equals (Environment .getExternalStorageState ())) {
65
- dir = mContext .getExternalCacheDir ().getPath ();
66
- } else {
67
- dir = mContext .getCacheDir ().getPath ();
68
- }
69
78
String fullPath = dir + File .separator + "crash_" + TimeUtils .getCurTimeString () + ".txt" ;
70
79
if (!FileUtils .createOrExistsFile (fullPath )) return ;
71
80
StringBuilder sb = new StringBuilder ();
@@ -97,19 +106,14 @@ public void uncaughtException(Thread thread, Throwable throwable) {
97
106
*/
98
107
private StringBuilder getCrashHead () {
99
108
StringBuilder sb = new StringBuilder ();
100
- try {
101
- PackageInfo pi = mContext .getPackageManager ().getPackageInfo (mContext .getPackageName (), 0 );
102
- sb .append ("\n ************* Crash Log Head ****************" );
103
- sb .append ("\n Device Manufacturer: " ).append (Build .MANUFACTURER );// 设备厂商
104
- sb .append ("\n Device Model : " ).append (Build .MODEL );// 设备型号
105
- sb .append ("\n Android Version : " ).append (Build .VERSION .RELEASE );// 系统版本
106
- sb .append ("\n Android SDK : " ).append (Build .VERSION .SDK_INT );// SDK版本
107
- sb .append ("\n App VersionName : " ).append (pi .versionName );
108
- sb .append ("\n App VersionCode : " ).append (pi .versionCode );
109
- sb .append ("\n ************* Crash Log Head ****************\n \n " );
110
- } catch (PackageManager .NameNotFoundException e ) {
111
- e .printStackTrace ();
112
- }
109
+ sb .append ("\n ************* Crash Log Head ****************" );
110
+ sb .append ("\n Device Manufacturer: " ).append (Build .MANUFACTURER );// 设备厂商
111
+ sb .append ("\n Device Model : " ).append (Build .MODEL );// 设备型号
112
+ sb .append ("\n Android Version : " ).append (Build .VERSION .RELEASE );// 系统版本
113
+ sb .append ("\n Android SDK : " ).append (Build .VERSION .SDK_INT );// SDK版本
114
+ sb .append ("\n App VersionName : " ).append (versionName );
115
+ sb .append ("\n App VersionCode : " ).append (versionCode );
116
+ sb .append ("\n ************* Crash Log Head ****************\n \n " );
113
117
return sb ;
114
118
}
115
119
}
0 commit comments