This commit is contained in:
Horis
2024-07-10 16:21:39 +08:00
parent 74fb80a174
commit e63512e8c7
5 changed files with 52 additions and 22 deletions

View File

@@ -17,6 +17,7 @@ import io.legado.app.constant.AppConst.channelIdReadAloud
import io.legado.app.constant.AppConst.channelIdWeb
import io.legado.app.constant.PreferKey
import io.legado.app.data.appDb
import io.legado.app.help.AppFreezeMonitor
import io.legado.app.help.AppWebDav
import io.legado.app.help.CrashHandler
import io.legado.app.help.DefaultData
@@ -70,6 +71,7 @@ class App : Application() {
registerActivityLifecycleCallbacks(LifecycleHelp)
defaultSharedPreferences.registerOnSharedPreferenceChangeListener(AppConfig)
DefaultData.upVersion()
AppFreezeMonitor.init()
Coroutine.async {
URL.setURLStreamHandlerFactory(ObsoleteUrlFactory(okHttpClient))
launch { installGmsTlsProvider(appCtx) }

View File

@@ -0,0 +1,44 @@
package io.legado.app.help
import android.os.Handler
import android.os.HandlerThread
import android.os.SystemClock
import io.legado.app.help.config.AppConfig
import io.legado.app.utils.LogUtils
object AppFreezeMonitor {
private const val TAG = "AppFreezeMonitor"
val handler by lazy {
Handler(HandlerThread("AppFreezeMonitor").apply { start() }.looper)
}
fun init() {
if (!AppConfig.recordLog) {
return
}
var previous = SystemClock.uptimeMillis()
val runnable = object : Runnable {
override fun run() {
val current = SystemClock.uptimeMillis()
val elapsed = current - previous
val extra = elapsed - 3000
if (extra > 100) {
LogUtils.d(TAG, "检测到应用被系统冻结,时长:$extra 毫秒")
}
previous = current
if (AppConfig.recordLog) {
handler.postDelayed(this, 3000)
}
}
}
handler.postDelayed(runnable, 3000)
}
}

View File

@@ -38,6 +38,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
var themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
var useDefaultCover = appCtx.getPrefBoolean(PreferKey.useDefaultCover, false)
var optimizeRender = appCtx.getPrefBoolean(PreferKey.optimizeRender, false)
var recordLog = appCtx.getPrefBoolean(PreferKey.recordLog)
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
when (key) {
@@ -89,6 +90,8 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
PreferKey.optimizeRender -> optimizeRender =
appCtx.getPrefBoolean(PreferKey.optimizeRender, false)
PreferKey.recordLog -> recordLog = appCtx.getPrefBoolean(PreferKey.recordLog)
}
}
@@ -456,8 +459,6 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
val webDavDeviceName get() = appCtx.getPrefString(PreferKey.webDavDeviceName, Build.MODEL)
val recordLog get() = appCtx.getPrefBoolean(PreferKey.recordLog)
val recordHeapDump get() = appCtx.getPrefBoolean(PreferKey.recordHeapDump, false)
val loadCoverOnlyWifi get() = appCtx.getPrefBoolean(PreferKey.loadCoverOnlyWifi, false)

View File

@@ -15,6 +15,7 @@ import io.legado.app.R
import io.legado.app.constant.EventBus
import io.legado.app.constant.PreferKey
import io.legado.app.databinding.DialogEditTextBinding
import io.legado.app.help.AppFreezeMonitor
import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.dialogs.alert
@@ -176,6 +177,7 @@ class OtherConfigFragment : PreferenceFragment(),
LogUtils.upLevel()
LogUtils.logDeviceInfo()
LiveEventBus.config().enableLogger(AppConfig.recordLog)
AppFreezeMonitor.init()
}
PreferKey.processText -> sharedPreferences?.let {

View File

@@ -11,7 +11,6 @@ import io.legado.app.help.config.AppConfig
import splitties.init.appCtx
import java.text.SimpleDateFormat
import java.util.Date
import java.util.logging.ConsoleHandler
import java.util.logging.FileHandler
import java.util.logging.Level
import java.util.logging.LogRecord
@@ -41,11 +40,10 @@ object LogUtils {
}
val logger: Logger by lazy {
Logger.getGlobal().apply {
Logger.getLogger("Leagdo").apply {
fileHandler?.let {
addHandler(it)
}
addHandler(consoleHandler)
}
}
@@ -75,22 +73,6 @@ object LogUtils {
}.asynchronous()
}
private val consoleHandler by lazy {
ConsoleHandler().apply {
formatter = object : java.util.logging.Formatter() {
override fun format(record: LogRecord): String {
// 设置文件输出格式
return (getCurrentDateStr(TIME_PATTERN) + ": " + record.message + "\n")
}
}
level = if (AppConfig.recordLog) {
Level.INFO
} else {
Level.OFF
}
}.asynchronous()
}
fun upLevel() {
val level = if (AppConfig.recordLog) {
Level.INFO
@@ -98,7 +80,6 @@ object LogUtils {
Level.OFF
}
fileHandler?.level = level
consoleHandler.level = level
}
/**