package com.miya.fastcashier import android.app.Activity import android.os.Bundle import androidx.multidex.MultiDexApplication import com.blankj.utilcode.util.LogUtils import com.elvishew.xlog.LogConfiguration import com.elvishew.xlog.LogLevel import com.elvishew.xlog.XLog import com.elvishew.xlog.printer.AndroidPrinter import com.elvishew.xlog.printer.ConsolePrinter import com.elvishew.xlog.printer.Printer import com.elvishew.xlog.printer.file.FilePrinter import com.elvishew.xlog.printer.file.backup.NeverBackupStrategy import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator import com.miya.fastcashier.service.AccountService import com.miya.fastcashier.utils.ContextUtils import com.miya.fastcashier.utils.DateUtils import com.miya.fastcashier.utils.DensityUtils import com.miya.fastcashier.utils.LogFileUtils import com.miya.fastcashier.utils.manage.LocalKeyDataMKManageKit import com.miya.fastcashier.utils.manage.OrderRecordManageKit import com.miya.print.PrinterManager import com.sdy.miya.moblie.component.pay.core.net.MiYaPayMobileApiClient import com.sdy.miya.moblie.component.pay.core.net.MiyaHttpLoggingInterceptor import com.sdy.miya.moblie.component.pay.core.utils.PayLogFileUtils import com.tencent.mmkv.MMKV import java.io.File import java.util.* class BaseApplication : MultiDexApplication() { companion object { private lateinit var instance: BaseApplication fun getApplication() = instance } override fun onCreate() { super.onCreate() instance = this ContextUtils.init(this) //打印机初始化 PrinterManager.getInstance().init(this) //屏幕适配 screenAdapt() MMKV.initialize(this) //日志 logConfig() } private fun logConfig() { XLog.init(LogLevel.ALL); val config = LogConfiguration.Builder() .logLevel( if (BuildConfig.DEBUG) LogLevel.ALL // 指定日志级别,低于该级别的日志将不会被打印,默认为 LogLevel.ALL else LogLevel.NONE ) .enableThreadInfo() // 允许打印线程信息,默认禁止 .build() val androidPrinter: Printer = AndroidPrinter(true) // 通过 android.util.Log 打印日志的打印器 val consolePrinter: Printer = ConsolePrinter() // 通过 System.out 打印日志到控制台的打印器 val filePrinter: Printer = FilePrinter.Builder( applicationContext.getExternalFilesDir(null)!! .absolutePath + File.separator + "log" ) // 指定保存日志文件的路径 .fileNameGenerator(DateFileNameGenerator()) // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log") .backupStrategy(NeverBackupStrategy()) // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024) .build() XLog.init( // 初始化 XLog config, // 指定日志配置,如果不指定,会默认使用 new LogConfiguration.Builder().build() androidPrinter, // 添加任意多的打印器。如果没有添加任何打印器,会默认使用 AndroidPrinter(Android)/ConsolePrinter(java) consolePrinter, filePrinter ) //支付日志文件夹 PayLogFileUtils.initLogPath( applicationContext.getExternalFilesDir(null)!! .absolutePath + File.separator + "payLog" ) var loggingInterceptor: MiyaHttpLoggingInterceptor? = null try { loggingInterceptor = MiyaHttpLoggingInterceptor { message -> if (!LogFileUtils.isProhibitWrite) { LogFileUtils.writeLog( ContextUtils.getContext(), DateUtils.getDateStringByTimeStamp(System.currentTimeMillis()) .toString() + " $message" + "\n" ) } if (BuildConfig.DEBUG) { LogUtils.d("fastcashier", message) } } loggingInterceptor.level = MiyaHttpLoggingInterceptor.Level.BODY } catch (ex: Exception) { ex.printStackTrace() if (!LogFileUtils.isProhibitWrite) { LogFileUtils.writeLog( ContextUtils.getContext(), DateUtils.getDateStringByTimeStamp(System.currentTimeMillis()) .toString() + "异常: ${ex.message}" + "\n" ) } } MiYaPayMobileApiClient.init(true, loggingInterceptor) } private fun screenAdapt() { registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { DensityUtils.setDensity(activity, this@BaseApplication) XLog.d(DateUtils.format18(Date()) + " onActivityCreated") if (!LogFileUtils.isProhibitWrite) { LogFileUtils.writeLog(ContextUtils.getContext(), "\n${DateUtils.format18(Date())}########onActivityCreated() called with: activity = [$activity]\n") } } override fun onActivityStarted(activity: Activity) { XLog.d(DateUtils.format18(Date()) + " onActivityStarted") if (!LogFileUtils.isProhibitWrite) { LogFileUtils.writeLog(ContextUtils.getContext(), "\n${DateUtils.format18(Date())}########onActivityStarted() called with: activity = [$activity]\n") } } override fun onActivityResumed(activity: Activity) { XLog.d(DateUtils.format18(Date()) + " onActivityResumed") if (!LogFileUtils.isProhibitWrite) { LogFileUtils.writeLog(ContextUtils.getContext(), "\n${DateUtils.format18(Date())}########onActivityResumed() called with: activity = [$activity]\n") } } override fun onActivityPaused(activity: Activity) { XLog.d(DateUtils.format18(Date()) + " onActivityPaused") if (!LogFileUtils.isProhibitWrite) { LogFileUtils.writeLog(ContextUtils.getContext(), "\n${DateUtils.format18(Date())}########onActivityPaused() called with: activity = [$activity]\n") } } override fun onActivityStopped(activity: Activity) { XLog.d(DateUtils.format18(Date()) + " onActivityStopped") if (!LogFileUtils.isProhibitWrite) { LogFileUtils.writeLog(ContextUtils.getContext(), "\n${DateUtils.format18(Date())}########onActivityStopped() called with: activity = [$activity]\n") } } override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) { XLog.d(DateUtils.format18(Date()) + " onActivitySaveInstanceState") if (!LogFileUtils.isProhibitWrite) { val memoryStatus = "\ttotalMemory:${Runtime.getRuntime().totalMemory()}\tfreeMemory:${Runtime.getRuntime().freeMemory()}" LogFileUtils.writeLog(ContextUtils.getContext(), "\n${DateUtils.format18(Date())}########onActivitySaveInstanceState() called with:" + " activity = [$activity]\nmemoryStatus: $memoryStatus") } } override fun onActivityDestroyed(activity: Activity) { XLog.d(DateUtils.format18(Date()) + " onActivityDestroyed") if (!LogFileUtils.isProhibitWrite) { LogFileUtils.writeLog(ContextUtils.getContext(), "\n${DateUtils.format18(Date())}########onActivityDestroyed() called with: activity = [$activity]\n") } } }) } fun resetConfig() { LocalKeyDataMKManageKit.clearCommonData() //清除本地订单昨天的流水信息 OrderRecordManageKit.clearOrderDataYeaterday() //清除本地个人信息 AccountService.clear() } }