1111import java .io .StringWriter ;
1212import java .io .Writer ;
1313import java .lang .Thread .UncaughtExceptionHandler ;
14+ import java .lang .ref .WeakReference ;
1415
1516/**
1617 * <pre>
2324public class CrashUtils implements Thread .UncaughtExceptionHandler {
2425
2526 private volatile static CrashUtils mInstance ;
26- private Context mContext ;
2727 private UncaughtExceptionHandler mHandler ;
2828 private boolean mInitialized ;
29+ private static String dir ;
30+ private String versionName ;
31+ private int versionCode ;
2932
3033 private CrashUtils () {
3134 }
3235
3336 /**
3437 * 获取单例
35- * <p>在Application中初始化{@code CrashUtils.getInstance().getBuilder (this);}</p>
38+ * <p>在Application中初始化{@code CrashUtils.getInstance().init (this);}</p>
3639 *
3740 * @return 单例
3841 */
@@ -50,22 +53,28 @@ public static CrashUtils getInstance() {
5053 *
5154 * @param context 上下文
5255 */
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+ }
5771 mHandler = Thread .getDefaultUncaughtExceptionHandler ();
5872 Thread .setDefaultUncaughtExceptionHandler (this );
73+ return mInitialized = true ;
5974 }
6075
6176 @ Override
6277 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- }
6978 String fullPath = dir + File .separator + "crash_" + TimeUtils .getCurTimeString () + ".txt" ;
7079 if (!FileUtils .createOrExistsFile (fullPath )) return ;
7180 StringBuilder sb = new StringBuilder ();
@@ -97,19 +106,14 @@ public void uncaughtException(Thread thread, Throwable throwable) {
97106 */
98107 private StringBuilder getCrashHead () {
99108 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 " );
113117 return sb ;
114118 }
115119}
0 commit comments