1
2
3
4
5
6
7
8
9
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
84
85
86
87
88
|
package cn.cmri.koudai.utilities.tag; import java.io.File; import java.io.FileInputStream; import java.io.PrintStream; import java.lang.Thread.UncaughtExceptionHandler; import java.util.Calendar; import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.Application; import android.content.Context; import android.content.Intent; @SuppressLint ( "SdCardPath" ) public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler{ private static MyUncaughtExceptionHandler
instance; private static final String
ERROR_FILE_NAME = "errorMsg.txt" ; private Context
con; private UncaughtExceptionHandler
systemHandler; @SuppressWarnings ( "deprecation" ) @Override public void uncaughtException(Thread
thread, Throwable ex) { ex.printStackTrace(); String
error = con.getFilesDir().getAbsolutePath(); try { File
f = new File(error); if (!f.exists()) f.mkdirs(); f
= new File(error,
ERROR_FILE_NAME); StringBuffer
line = new StringBuffer( "" ); if (f.exists()){ FileInputStream
in = new FileInputStream(f); byte []
b = new byte [in.available()]; in.read(b); in.close(); line.append( new String(b)); } PrintStream
out = new PrintStream(f); ex.printStackTrace(out); out.flush(); out.append( "----JAVA
SYSTEM INFO END----\n----OTHER INFO ----\nERROR HAPPEND TIME: " +
Calendar.getInstance().getTime().toLocaleString() + "\nSYSTEM.CURRENTTIMEMILLIS:" +
System.currentTimeMillis()); out.append( "\n-----------------------------------\n" ); if (line.toString()
!= "null" ) out.append(line.toString()); out.flush(); out.close(); } catch (Exception
e1) { e1.printStackTrace(); } //android.os.Process.killProcess(android.os.Process.myPid()); if (systemHandler
!= null ){ systemHandler.uncaughtException(thread,
ex); } System.exit( 1 ); } private MyUncaughtExceptionHandler(Application
con, UncaughtExceptionHandler systemHandler){ this .con
= con; this .systemHandler
= systemHandler; } public static MyUncaughtExceptionHandler
getInstance(Application con, UncaughtExceptionHandler systemHandler){ if (instance
== null ) instance
= new MyUncaughtExceptionHandler(con,
systemHandler); return instance; } public String
getFilePath(){ return con.getFilesDir().getAbsolutePath()
+ "/" +
ERROR_FILE_NAME; } } |
这是写一个类实现UncaughtExceptionHandler接口
然后在Application中创建他。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package cn.cmri.koudai.utilities.app; import java.lang.Thread.UncaughtExceptionHandler; import cn.cmri.koudai.utilities.tag.MyUncaughtExceptionHandler; import android.app.Application; public class BaseApplication extends Application
{ private static BaseApplication
instance; @Override public void onCreate()
{ super .onCreate(); instance
= this ; UncaughtExceptionHandler
defaultUncaught = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(MyUncaughtExceptionHandler.getInstance( this ,
defaultUncaught)); } public static BaseApplication
getInstance(){ return instance; } } |
最后,别忘了吧AndroidManifase.xml中的name属性改成你重写的这个类的名字
<application android:name=".common.MyApp" android:icon="@drawable/launcher"
android:label="@string/app_name">