diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt index 77280fe..f608a2e 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.Handler import android.os.Message +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,8 +15,8 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicInteger class BaseSettingsFragment : KotlinBaseFragment(), Handler.Callback { @@ -30,6 +31,7 @@ private var isGetAlgorithmConfig = false private var isUseAlgorithm = false private var isGetServerConfig = false + private var retryTimes = AtomicInteger(0) override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -52,36 +54,90 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) if (isVisibleToUser) { - lifecycleScope.launch(Dispatchers.IO) { - while (!isGetBoardConfig) { - //查询主控板IP、子网掩码、网关IP - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_BOARD_CONFIG_CODE) - delay(1000) + Log.d(kTag, "setUserVisibleHint: 界面可见,获取第一个配置参数") + weakReferenceHandler?.removeCallbacksAndMessages(null) + weakReferenceHandler?.post(boardConfigRunnable) + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + } + } + + private val boardConfigRunnable = object : Runnable { + override fun run() { + if (!isGetBoardConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_BOARD_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(wiFiConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(wiFiConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetWiFiConfig) { - //查询安全树连接的WiFi配置 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_WIFI_CONFIG_CODE) - delay(1000) + private val wiFiConfigRunnable = object : Runnable { + override fun run() { + if (!isGetWiFiConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_WIFI_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(algorithmConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(algorithmConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetAlgorithmConfig) { - //查询是否配合一体机使用 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_IS_USE_AI_CODE) - delay(1000) + private val algorithmConfigRunnable = object : Runnable { + override fun run() { + if (!isGetAlgorithmConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_IS_USE_AI_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(serverConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(serverConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetServerConfig) { - //查询服务器IP、端口 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_SERVER_CONFIG_CODE) - delay(1000) + private val serverConfigRunnable = object : Runnable { + override fun run() { + if (!isGetServerConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_SERVER_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数获取失败,移除所有参数线程回调") } + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数均已获取,移除所有参数线程回调") } } } diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt index 77280fe..f608a2e 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.Handler import android.os.Message +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,8 +15,8 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicInteger class BaseSettingsFragment : KotlinBaseFragment(), Handler.Callback { @@ -30,6 +31,7 @@ private var isGetAlgorithmConfig = false private var isUseAlgorithm = false private var isGetServerConfig = false + private var retryTimes = AtomicInteger(0) override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -52,36 +54,90 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) if (isVisibleToUser) { - lifecycleScope.launch(Dispatchers.IO) { - while (!isGetBoardConfig) { - //查询主控板IP、子网掩码、网关IP - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_BOARD_CONFIG_CODE) - delay(1000) + Log.d(kTag, "setUserVisibleHint: 界面可见,获取第一个配置参数") + weakReferenceHandler?.removeCallbacksAndMessages(null) + weakReferenceHandler?.post(boardConfigRunnable) + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + } + } + + private val boardConfigRunnable = object : Runnable { + override fun run() { + if (!isGetBoardConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_BOARD_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(wiFiConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(wiFiConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetWiFiConfig) { - //查询安全树连接的WiFi配置 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_WIFI_CONFIG_CODE) - delay(1000) + private val wiFiConfigRunnable = object : Runnable { + override fun run() { + if (!isGetWiFiConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_WIFI_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(algorithmConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(algorithmConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetAlgorithmConfig) { - //查询是否配合一体机使用 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_IS_USE_AI_CODE) - delay(1000) + private val algorithmConfigRunnable = object : Runnable { + override fun run() { + if (!isGetAlgorithmConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_IS_USE_AI_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(serverConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(serverConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetServerConfig) { - //查询服务器IP、端口 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_SERVER_CONFIG_CODE) - delay(1000) + private val serverConfigRunnable = object : Runnable { + override fun run() { + if (!isGetServerConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_SERVER_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数获取失败,移除所有参数线程回调") } + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数均已获取,移除所有参数线程回调") } } } diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/MethaneMonitorFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/MethaneMonitorFragment.kt index b1e3295..599d43d 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/MethaneMonitorFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/MethaneMonitorFragment.kt @@ -5,9 +5,9 @@ import android.os.Bundle import android.os.Handler import android.os.Message +import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup -import androidx.lifecycle.lifecycleScope import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.FragmentMethaneMonitorBinding import com.casic.br.operationsite.extensions.initConfig @@ -27,9 +27,7 @@ import com.pengxh.kt.lite.extensions.timestampToTime import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicInteger class MethaneMonitorFragment : KotlinBaseFragment(), Handler.Callback { @@ -46,9 +44,11 @@ //趋势线起点X坐标 private var i = 0 + private var isGetMethaneState = false private var isGetThreshold = false private var isGetTemperature = false + private var retryTimes = AtomicInteger(0) override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -86,25 +86,70 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) if (isVisibleToUser) { - lifecycleScope.launch(Dispatchers.IO) { - while (!isGetMethaneState) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) - delay(1000) + Log.d(kTag, "setUserVisibleHint: 界面可见,获取第一个配置参数") + weakReferenceHandler?.removeCallbacksAndMessages(null) + weakReferenceHandler?.post(methaneStateRunnable) + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + } + } + + private val methaneStateRunnable = object : Runnable { + override fun run() { + if (!isGetMethaneState) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(methaneThresholdRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(methaneThresholdRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetThreshold) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_THRESHOLD_CODE) - delay(1000) + private val methaneThresholdRunnable = object : Runnable { + override fun run() { + if (!isGetThreshold) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_THRESHOLD_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(cpuTemperatureRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(cpuTemperatureRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetTemperature) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) - delay(1000) + private val cpuTemperatureRunnable = object : Runnable { + override fun run() { + if (!isGetTemperature) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数获取失败,移除所有参数线程回调") } + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数均已获取,移除所有参数线程回调") } } } diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt index 77280fe..f608a2e 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt @@ -3,6 +3,7 @@ import android.os.Bundle import android.os.Handler import android.os.Message +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,8 +15,8 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicInteger class BaseSettingsFragment : KotlinBaseFragment(), Handler.Callback { @@ -30,6 +31,7 @@ private var isGetAlgorithmConfig = false private var isUseAlgorithm = false private var isGetServerConfig = false + private var retryTimes = AtomicInteger(0) override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -52,36 +54,90 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) if (isVisibleToUser) { - lifecycleScope.launch(Dispatchers.IO) { - while (!isGetBoardConfig) { - //查询主控板IP、子网掩码、网关IP - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_BOARD_CONFIG_CODE) - delay(1000) + Log.d(kTag, "setUserVisibleHint: 界面可见,获取第一个配置参数") + weakReferenceHandler?.removeCallbacksAndMessages(null) + weakReferenceHandler?.post(boardConfigRunnable) + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + } + } + + private val boardConfigRunnable = object : Runnable { + override fun run() { + if (!isGetBoardConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_BOARD_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(wiFiConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(wiFiConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetWiFiConfig) { - //查询安全树连接的WiFi配置 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_WIFI_CONFIG_CODE) - delay(1000) + private val wiFiConfigRunnable = object : Runnable { + override fun run() { + if (!isGetWiFiConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_WIFI_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(algorithmConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(algorithmConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetAlgorithmConfig) { - //查询是否配合一体机使用 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_IS_USE_AI_CODE) - delay(1000) + private val algorithmConfigRunnable = object : Runnable { + override fun run() { + if (!isGetAlgorithmConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_IS_USE_AI_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(serverConfigRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(serverConfigRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetServerConfig) { - //查询服务器IP、端口 - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_SERVER_CONFIG_CODE) - delay(1000) + private val serverConfigRunnable = object : Runnable { + override fun run() { + if (!isGetServerConfig) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_SERVER_CONFIG_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数获取失败,移除所有参数线程回调") } + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数均已获取,移除所有参数线程回调") } } } diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/MethaneMonitorFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/MethaneMonitorFragment.kt index b1e3295..599d43d 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/MethaneMonitorFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/MethaneMonitorFragment.kt @@ -5,9 +5,9 @@ import android.os.Bundle import android.os.Handler import android.os.Message +import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup -import androidx.lifecycle.lifecycleScope import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.FragmentMethaneMonitorBinding import com.casic.br.operationsite.extensions.initConfig @@ -27,9 +27,7 @@ import com.pengxh.kt.lite.extensions.timestampToTime import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicInteger class MethaneMonitorFragment : KotlinBaseFragment(), Handler.Callback { @@ -46,9 +44,11 @@ //趋势线起点X坐标 private var i = 0 + private var isGetMethaneState = false private var isGetThreshold = false private var isGetTemperature = false + private var retryTimes = AtomicInteger(0) override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -86,25 +86,70 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) if (isVisibleToUser) { - lifecycleScope.launch(Dispatchers.IO) { - while (!isGetMethaneState) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) - delay(1000) + Log.d(kTag, "setUserVisibleHint: 界面可见,获取第一个配置参数") + weakReferenceHandler?.removeCallbacksAndMessages(null) + weakReferenceHandler?.post(methaneStateRunnable) + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + } + } + + private val methaneStateRunnable = object : Runnable { + override fun run() { + if (!isGetMethaneState) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(methaneThresholdRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(methaneThresholdRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetThreshold) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_THRESHOLD_CODE) - delay(1000) + private val methaneThresholdRunnable = object : Runnable { + override fun run() { + if (!isGetThreshold) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_THRESHOLD_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(cpuTemperatureRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(cpuTemperatureRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetTemperature) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) - delay(1000) + private val cpuTemperatureRunnable = object : Runnable { + override fun run() { + if (!isGetTemperature) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数获取失败,移除所有参数线程回调") } + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数均已获取,移除所有参数线程回调") } } } diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/VoiceSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/VoiceSettingsFragment.kt index 3903f14..ac518a3 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/VoiceSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/VoiceSettingsFragment.kt @@ -3,17 +3,15 @@ import android.os.Bundle import android.os.Handler import android.os.Message +import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup -import androidx.lifecycle.lifecycleScope import com.casic.br.operationsite.databinding.FragmentVoiceSettingsBinding import com.casic.br.operationsite.service.SocketConnectionService import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.WeakReferenceHandler -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicInteger class VoiceSettingsFragment : KotlinBaseFragment(), Handler.Callback { @@ -32,11 +30,12 @@ 6 to "最大音量" ) private var currentIndex = 6 - private var isVisibleToUser = false + private var isGetVoiceValue = false private var isGetVoiceMode = false private var isGetAlarmMode = false private var isGetDeviceStateVoice = false + private var retryTimes = AtomicInteger(0) override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -58,34 +57,91 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) - this.isVisibleToUser = isVisibleToUser if (isVisibleToUser) { - lifecycleScope.launch(Dispatchers.IO) { - while (!isGetVoiceValue) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_VALUE_CODE) - delay(1000) + Log.d(kTag, "setUserVisibleHint: 界面可见,获取第一个配置参数") + weakReferenceHandler?.removeCallbacksAndMessages(null) + weakReferenceHandler?.post(voiceValueRunnable) + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + } + } + + private val voiceValueRunnable = object : Runnable { + override fun run() { + if (!isGetVoiceValue) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_VALUE_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(voiceModeRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(voiceModeRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetVoiceMode) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_MODE_CODE) - delay(1000) + private val voiceModeRunnable = object : Runnable { + override fun run() { + if (!isGetVoiceMode) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_MODE_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(alarmModeRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(alarmModeRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetAlarmMode) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_ALARM_MODE_CODE) - delay(1000) + private val alarmModeRunnable = object : Runnable { + override fun run() { + if (!isGetAlarmMode) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_ALARM_MODE_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(deviceStateRunnable, 500L) + retryTimes.set(0) } + } else { + Log.d(kTag, "run: 获取下一个配置参数") + weakReferenceHandler?.removeCallbacks(this) + weakReferenceHandler?.postDelayed(deviceStateRunnable, 500L) + retryTimes.set(0) + } + } + } - delay(500) - - while (!isGetDeviceStateVoice) { - SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_DEVICE_STATE_VOICE_CODE) - delay(1000) + private val deviceStateRunnable = object : Runnable { + override fun run() { + if (!isGetDeviceStateVoice) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_DEVICE_STATE_VOICE_CODE) + // 每秒重复一次 + weakReferenceHandler?.postDelayed(this, 1000L) + if (retryTimes.incrementAndGet() >= 5) { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数获取失败,移除所有参数线程回调") } + } else { + weakReferenceHandler?.removeCallbacksAndMessages(null) + retryTimes.set(0) + Log.d(kTag, "run: 所有参数均已获取,移除所有参数线程回调") } } }