AndroidUtilCode icon indicating copy to clipboard operation
AndroidUtilCode copied to clipboard

Android 33 CrashUtils.init监听不到

Open wubao100 opened this issue 2 years ago • 9 comments

com.blankj:utilcodex:1.31.1 Android 33 具体代码 CrashUtils.init { crashInfo -> Log.i("------"); } 没有走回掉

wubao100 avatar Dec 30 '22 08:12 wubao100

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);
            }
        }
    };
}

wubao100 avatar Jan 09 '23 01:01 wubao100

if (DEFAULT_UNCAUGHT_EXCEPTION_HANDLER != null) { DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(t, e); } 此处代码会阻塞后续监听

wubao100 avatar Jan 09 '23 01:01 wubao100

@Blankj

wubao100 avatar Jan 09 '23 01:01 wubao100

我也发现这个问题了,但是又不知道怎么覆写。

blisssayyid avatar Jan 12 '23 07:01 blisssayyid

我也发现这个问题了,但是又不知道怎么覆写。 if (onCrashListener != null) { onCrashListener.onCrash(info); } else if (DEFAULT_UNCAUGHT_EXCEPTION_HANDLER != null) { DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(t, e); }

我代码复制过来重写了这块

wubao100 avatar Jan 16 '23 05:01 wubao100

直接在init回调里面重写吗 @wubao100

artillerymans avatar Mar 10 '23 13:03 artillerymans

完全copy一份出来 调换一下回调的位置就可以了

artillerymans avatar Mar 11 '23 02:03 artillerymans

我是这么做的:

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)
        }
    }
}

blisssayyid avatar Mar 18 '23 09:03 blisssayyid