Thread.UncaughtExceptionHandler 사용하여 앱 비정상 종료시 로그출력 예제
java)
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 | package com.wnet.uncaughtex; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; public class MainActivity extends AppCompatActivity { Thread.UncaughtExceptionHandler mUncaughtExceptionHandler; @Override protected void onCreate(Bundle savedInstanceState) { mUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandlerApplication()); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnError1 = (Button)findViewById(R.id.btnError1); btnError1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try{ Thread.sleep(1000); }catch (InterruptedException e){ e.printStackTrace(); } int test = 1/0; } }); } class UncaughtExceptionHandlerApplication implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread t, Throwable e) { Log.d("error", t.getName()+" : "+getStackTrace(e)); } private String getStackTrace(Throwable th){ final Writer result = new StringWriter(); final PrintWriter printWriter = new PrintWriter(result); Throwable cause = th; while(cause!=null){ cause.printStackTrace(printWriter); cause = cause.getCause(); } final String stacktraceAsString = result.toString(); printWriter.close(); return stacktraceAsString; } } } | cs |
결과
버튼 클릭시 0으로 나눌려고 했기 때문에 에러가 나오고 그 에러를 캐치하여 로그로 출력해준다
1 2 3 4 5 6 7 8 9 10 11 12 13 | 01-31 16:25:23.610 31066-31066/com.wnet.uncaughtex D/AndroidRuntime: Shutting down VM 01-31 16:25:23.610 31066-31066/com.wnet.uncaughtex D/error: main : java.lang.ArithmeticException: divide by zero at com.wnet.uncaughtex.MainActivity$1.onClick(MainActivity.java:37) at android.view.View.performClick(View.java:5697) at android.widget.TextView.performClick(TextView.java:10814) at android.view.View$PerformClick.run(View.java:22526) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) | cs |
'IT > - 프로그래밍' 카테고리의 다른 글
Cocos 토글 아이템메뉴 사용하기 (0) | 2017.02.02 |
---|---|
Cocos Sprite를 이용한 메뉴 생성하기 (0) | 2017.02.01 |
Cocos Label을 이용한 메뉴 생성하기 (0) | 2017.01.31 |
Cocos 폰트를 이용한 메뉴 생성하기 (0) | 2017.01.26 |
Cocos 이미지를 이용한 메뉴 생성하기 (0) | 2017.01.25 |