Notice
Recent Posts
Recent Comments
Link
투케이2K
132. (TWOK/UTIL) [Android/Kotlin] S_Crash : 앱 사용 중 발생한 Crash 크래시 리포트 저장 클래스 - UncaughtException 본문
투케이2K 유틸파일
132. (TWOK/UTIL) [Android/Kotlin] S_Crash : 앱 사용 중 발생한 Crash 크래시 리포트 저장 클래스 - UncaughtException
투케이2K 2024. 7. 19. 19:30[설 명]
프로그램 : Android / Kotlin
설 명 : S_Crash : 앱 사용 중 발생한 Crash 크래시 리포트 저장 클래스 - UncaughtException
[소스 코드]
package com.example.kotlinproject
import android.app.Activity
import android.content.Context
import java.io.BufferedWriter
import java.io.File
import java.io.FileWriter
import java.io.PrintWriter
import java.io.StringWriter
import java.text.SimpleDateFormat
import java.util.*
class S_Crash : Thread.UncaughtExceptionHandler {
/**
* // --------------------------------------------------------------------------------------
* TODO [클래스 설명]
* // --------------------------------------------------------------------------------------
* 1. 앱 사용 중 발생한 Crash 크래시 리포트 저장 클래스
* // --------------------------------------------------------------------------------------
* 2. 호출 방법 : 각 액티비티 onCreate 에 선언 필요
*
* @Override
* override fun onCreate(Bundle savedInstanceState) {
* super.onCreate(savedInstanceState)
*
* // TODO [앱 크래시 리포트 저장]
* Thread.setDefaultUncaughtExceptionHandler(S_Crash(this@A_Intro))
* }
*
* // --------------------------------------------------------------------------------------
* 3. 로그 저장 예시 :
*
* ----------------------------------------------------
* [FILE SAVE TIME] : 2023-11-24 14:31:27 금요일
* ----------------------------------------------------
* [DEVICE MODEL NAME] : [samsung] SM-S906N
* ----------------------------------------------------
* [DEVICE OS VERSION] : 13
* ----------------------------------------------------
* [APP VERSION] : 1.0.2
* ----------------------------------------------------
* [APP CODE] : 2
* ----------------------------------------------------
* [SAVE EXPLAIN] : uncaughtException : 예기치 못한 Exception 크래시 로그 저장
* ----------------------------------------------------
* [CLASS NAME] : ComponentInfo{com.example.javaproject/com.example.javaproject.A_Intro}
* ----------------------------------------------------
*
* java.lang.NumberFormatException: For input string: "h"
*
* java.lang.Integer.parseInt(Integer.java:747)
* java.lang.Integer.parseInt(Integer.java:865)
* com.example.javaproject.A_Intro.onCreate(A_Intro.java:364)
* android.app.Activity.performCreate(Activity.java:8591)
* android.app.Activity.performCreate(Activity.java:8570)
* android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
* android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4150)
* android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4325)
* android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
* android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
* android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
* android.app.ActivityThread$H.handleMessage(ActivityThread.java:2574)
* android.os.Handler.dispatchMessage(Handler.java:106)
* android.os.Looper.loopOnce(Looper.java:226)
* android.os.Looper.loop(Looper.java:313)
* android.app.ActivityThread.main(ActivityThread.java:8762)
* java.lang.reflect.Method.invoke(Native Method)
* com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
* com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
*
* ----------------------------------------------------
*
* // --------------------------------------------------------------------------------------
* */
/**
* // --------------------------------------------------------------------------------------
* // TODO [빠른 로직 찾기 : 주석 로직 찾기]
* // --------------------------------------------------------------------------------------
* [SEARCH FAST] : [파일] : [예기치 못한 Exception 이벤트 감지 부분]
* // --------------------------------------------------------------------------------------
* [SEARCH FAST] : [파일] : [로그 정보 파일 데이터 저장]
* // --------------------------------------------------------------------------------------
*
* // --------------------------------------------------------------------------------------
* */
// -----------------------------------------------------------------------------------------
// TODO [전역 변수 선언 실시]
// -----------------------------------------------------------------------------------------
private var crashHandler: Thread.UncaughtExceptionHandler? = null
private var activity: Activity? = null
// -----------------------------------------------------------------------------------------
// TODO [클래스 생성자 초기화]
// -----------------------------------------------------------------------------------------
init { println("S_Crash :: init") }
constructor(app: Activity) {
this.crashHandler = Thread.getDefaultUncaughtExceptionHandler()
this.activity = app
}
// -----------------------------------------------------------------------------------------
// TODO [SEARCH FAST] : [파일] : [예기치 못한 Exception 이벤트 감지 부분]
// -----------------------------------------------------------------------------------------
override fun uncaughtException(t: Thread?, e: Throwable) {
if (this.activity != null) {
S_Log._E_("예기치 못한 Exception 이벤트 감지", arrayOf(e.message.toString()))
// [로직 처리 실시]
try {
S_FileManager.appCrashLogSave(activity!!, "uncaughtException : 예기치 못한 Exception 크래시 로그 자동 저장", e)
} catch (eh: Exception) {
}
}
if (this.crashHandler != null) {
this.crashHandler!!.uncaughtException(t, e)
}
}
// -----------------------------------------------------------------------------------------
// TODO [SEARCH FAST] : [파일] : [로그 정보 파일 데이터 저장]
// -----------------------------------------------------------------------------------------
/*
S_Crash.catchException(getApplicationContext(), e); // [로그 파일 저장]
// */
// -----------------------------------------------------------------------------------------
companion object {
fun catchException(mContext: Context?, e: Throwable) {
/**
* // -----------------------------------------
* 1. 에러 정보 파일 데이터 저장
* // -----------------------------------------
* 2. 호출 방식 :
*
* S_Crash.catchException(A_Main@this, e) // [로그 파일 저장]
*
* // -----------------------------------------
* 3. 설 명 : 내부 저장소는 퍼미션 권한 없이 읽기, 쓰기 가능 / 앱 삭제 시 저장된 데이터 삭제
* // -----------------------------------------
* 4. 저장 공간 : /data/data/패키지 명칭/files/APP_CRASH_LOG_FILE
* // -----------------------------------------
* */
// TODO [mContext != null]
if (mContext != null){
S_FileManager.appCrashLogSave(mContext, "caughtException : Try Catch Exception 예외 처리 로그 자동 저장", e)
}
}
}
} // TODO [클래스 종료]
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments