AndroidUtilCode
AndroidUtilCode copied to clipboard
Android 33 CrashUtils.init监听不到
com.blankj:utilcodex:1.31.1 Android 33 具体代码 CrashUtils.init { crashInfo -> Log.i("------"); } 没有走回掉
private static UncaughtExceptionHandler getUncaughtExceptionHandler(final String dirPath, final OnCrashListener onCrashListener) { return new UncaughtExceptionHandler() { @Override public void uncaughtException(@NonNull final Thread t, @NonNull final Throwable e) { final String time = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss").format(new Date()); CrashInfo info = new CrashInfo(time, e); final String crashFile = dirPath + time + ".txt"; UtilsBridge.writeFileFromString(crashFile, info.toString(), true);
if (DEFAULT_UNCAUGHT_EXCEPTION_HANDLER != null) {
DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(t, e);
}
if (onCrashListener != null) {
onCrashListener.onCrash(info);
}
}
};
}
if (DEFAULT_UNCAUGHT_EXCEPTION_HANDLER != null) { DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(t, e); } 此处代码会阻塞后续监听
@Blankj
我也发现这个问题了,但是又不知道怎么覆写。
我也发现这个问题了,但是又不知道怎么覆写。 if (onCrashListener != null) { onCrashListener.onCrash(info); } else if (DEFAULT_UNCAUGHT_EXCEPTION_HANDLER != null) { DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(t, e); }
我代码复制过来重写了这块
直接在init回调里面重写吗 @wubao100
完全copy一份出来 调换一下回调的位置就可以了
我是这么做的:
import com.blankj.utilcode.util.*
import com.blankj.utilcode.util.CrashUtils
import java.io.File
import java.lang.reflect.Constructor
import java.text.SimpleDateFormat
import java.util.*
/**
* CrashUtils 工具类
*
* 修改于 Blankj 的 CrashUtils
* 因为它的有 Bug, 但是还没修复
*/
object CrashUtils {
private val FILE_SEP = System.getProperty("file.separator")
private val DEFAULT_UNCAUGHT_EXCEPTION_HANDLER = Thread.getDefaultUncaughtExceptionHandler()
/**
* Initialization.
*/
fun init() {
init("")
}
/**
* Initialization
*
* @param crashDir The directory of saving crash information.
*/
fun init(crashDir: File) {
init(crashDir.absolutePath) {}
}
/**
* Initialization
*
* @param crashDirPath The directory's path of saving crash information.
*/
fun init(crashDirPath: String) {
init(crashDirPath) {}
}
/**
* Initialization
*
* @param onCrash The crash listener.
*/
fun init(onCrash: (crashInfo: CrashUtils.CrashInfo) -> Unit) {
init("", onCrash)
}
/**
* Initialization
*
* @param crashDir The directory of saving crash information.
* @param onCrash The crash listener.
*/
fun init(crashDir: File, onCrash: (crashInfo: CrashUtils.CrashInfo) -> Unit) {
init(crashDir.absolutePath, onCrash)
}
/**
* Initialization
*
* @param crashDirPath The directory's path of saving crash information.
* @param onCrash The crash listener.
*/
fun init(crashDirPath: String, onCrash: (crashInfo: CrashUtils.CrashInfo) -> Unit) {
val dirPath = if (crashDirPath.isNullOrBlank()) {
if (SDCardUtils.isSDCardEnableByEnvironment() && Utils.getApp().getExternalFilesDir(null) != null
) {
Utils.getApp().getExternalFilesDir(null).toString() + FILE_SEP + "crash" + FILE_SEP
} else {
Utils.getApp().filesDir.toString() + FILE_SEP + "crash" + FILE_SEP
}
} else {
if (crashDirPath.endsWith(FILE_SEP)) crashDirPath else crashDirPath + FILE_SEP
}
Thread.setDefaultUncaughtExceptionHandler(getUncaughtExceptionHandler(dirPath, onCrash))
}
private fun getUncaughtExceptionHandler(dirPath: String, onCrash: (crashInfo: CrashUtils.CrashInfo) -> Unit): Thread.UncaughtExceptionHandler? {
return Thread.UncaughtExceptionHandler { thread, throwable ->
val time = SimpleDateFormat("yyyy_MM_dd-HH_mm_ss").format(Date())
val info = ReflectUtils.reflect(CrashUtils.CrashInfo::class.java).newInstance(time, throwable).get<CrashUtils.CrashInfo>()
val crashFile = "$dirPath$time.txt"
FileIOUtils.writeFileFromString(crashFile, info.toString(), true)
onCrash(info)
DEFAULT_UNCAUGHT_EXCEPTION_HANDLER?.uncaughtException(thread, throwable)
}
}
}