Browse Source

fix 修复fragment detach后仍运行协程的问题

robin 4 years ago
parent
commit
41869af3cc

+ 1 - 1
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentNozzle.kt

@@ -54,7 +54,7 @@ class FragmentNozzle private constructor(private val pumpList: List<PumpInfo>) :
     }
 
     private fun handleNozzleRefresh() {
-        lifecycleScope.launch {
+        lifecycleScope.launchWhenStarted {
             val resultNozzles = FusionManager.getPumpInfo()
             if (resultNozzles.success && resultNozzles.data != null) {
                 if (FusionManager.pumpList.isNotEmpty()) FusionManager.pumpList.clear()

+ 2 - 3
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentOrderList.kt

@@ -20,7 +20,6 @@ import com.doverfuelingsolutions.issp.view.adapter.ChooseListAdapter
 import com.doverfuelingsolutions.issp.view.adapter.OrderListAdapter
 import com.scwang.smart.refresh.header.ClassicsHeader
 import com.wayne.www.waynelib.fdc.message.DeviceClass
-import kotlinx.coroutines.launch
 
 class FragmentOrderList private constructor(private val pumpId: Int) : FragmentBasic() {
 
@@ -81,7 +80,7 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
     }
 
     private fun selectOrder(dc: DeviceClass, type: Int, position: Int) {
-        lifecycleScope.launch {
+        lifecycleScope.launchWhenStarted {
             when {
                 dc.releaseTokenElement == null || dc.releaseTokenAttribute == null -> {
                     DFSToastUtil.fail(R.string.wrong_order_info)
@@ -121,7 +120,7 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
     }
 
     private fun handleRefresh() {
-        lifecycleScope.launch {
+        lifecycleScope.launchWhenStarted {
             loadRemoteData()
             binding.smartRefreshLayout.finishRefresh(200, true, false)
         }

+ 1 - 1
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayResult.kt

@@ -80,7 +80,7 @@ class FragmentPayResult private constructor(
     }
 
     private fun print() {
-        lifecycleScope.launch {
+        lifecycleScope.launchWhenStarted {
             val result = printManager.print(dc, posTrxBean)
             if (result.success) {
                 viewModel.isReprint.value = false

+ 4 - 5
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayScanCode.kt

@@ -15,7 +15,6 @@ import com.doverfuelingsolutions.issp.driver.lib.ScanCodeManager
 import com.doverfuelingsolutions.issp.fusion.FusionManager
 import com.doverfuelingsolutions.issp.utils.DFSToastUtil
 import com.doverfuelingsolutions.issp.utils.StringUtil
-import com.doverfuelingsolutions.issp.utils.log.DFSLog
 import com.doverfuelingsolutions.issp.utils.sp.SPUtil
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.wayne.www.waynelib.fdc.message.DeviceClass
@@ -41,7 +40,7 @@ class FragmentPayScanCode(private val dc: DeviceClass, private val posTrx: PosTr
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
-        lifecycleScope.launch { scanCodeManager.create() }
+        lifecycleScope.launchWhenCreated { scanCodeManager.create() }
     }
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
@@ -74,17 +73,17 @@ class FragmentPayScanCode(private val dc: DeviceClass, private val posTrx: PosTr
     }
 
     private fun startPay() {
-        lifecycleScope.launch {
+        lifecycleScope.launchWhenStarted {
             if (!scanCodeManager.isAvailable) {
                 DFSToastUtil.fail(StringUtil.get(R.string.fail_behave_reason, StringUtil.get(R.string.init_scanner), StringUtil.get(R.string.plz_check_scanner)))
-                return@launch
+                return@launchWhenStarted
             }
 
             val scanValue = scanCodeManager.start()
             if (scanValue == null) {
                 DFSToastUtil.fail(R.string.plz_correct_pay_code)
                 startPay()
-                return@launch
+                return@launchWhenStarted
             }
 
             val dialog = loading(R.string.in_pay)

+ 4 - 5
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayType.kt

@@ -17,7 +17,6 @@ import com.doverfuelingsolutions.issp.utils.sp.SPUtil
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.wayne.www.waynelib.fdc.message.DeviceClass
 import com.wayne.www.waynelib.webservice.entity.PosTrx
-import kotlinx.coroutines.launch
 import java.math.BigDecimal
 
 class FragmentPayType private constructor(private val dc: DeviceClass): FragmentBasic(), View.OnClickListener {
@@ -53,7 +52,7 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
         val dialog = loading(R.string.in_process_order)
         (requireActivity() as MainActivity).fragmentRouter.stopFragmentToolbarTimer()
 
-        lifecycleScope.launch {
+        lifecycleScope.launchWhenStarted {
             // 累计数信息
             val resultAccumulationInfo = FuelInfoApi.accumulationInfo(dc)
             if (resultAccumulationInfo.success && resultAccumulationInfo.data != null) {
@@ -64,7 +63,7 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
                 dialog.dismiss()
                 (requireActivity() as MainActivity).fragmentRouter.resumeFragmentToolbarTimer()
                 DFSToastUtil.fail(R.string.fail_get_accumulation)
-                return@launch
+                return@launchWhenStarted
             }
 
             // 查询最新的油品ID(非BarcodeId)
@@ -73,7 +72,7 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
                 dialog.dismiss()
                 // (requireActivity() as MainActivity).fragmentRouter.resumeFragmentToolbarTimer()
                 DFSToastUtil.fail("查询油品posItemUniqueId失败")
-                return@launch
+                return@launchWhenStarted
             }
 
             // 获取云订单(本地需要缓存,避免重复生成订单)
@@ -91,7 +90,7 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
             }
 
             // 锁定订单
-            if (posTrx == null) return@launch
+            if (posTrx == null) return@launchWhenStarted
             val resultLock = FusionManager.lockOrder(dc, true)
             dialog.dismiss()
             (requireActivity() as MainActivity).fragmentRouter.resumeFragmentToolbarTimer()

+ 1 - 3
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentReconnect.kt

@@ -12,8 +12,6 @@ import com.doverfuelingsolutions.issp.fusion.FusionManager
 import com.doverfuelingsolutions.issp.utils.DFSToastUtil
 import com.doverfuelingsolutions.issp.view.PreferenceActivity
 import com.wayne.www.waynelib.fdc.FdcClient
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
 
 class FragmentReconnect private constructor(
     private val handler: () -> Unit,
@@ -56,7 +54,7 @@ class FragmentReconnect private constructor(
                 handler.invoke()
             }
             binding.buttonFetchInfo -> {
-                lifecycleScope.launch {
+                lifecycleScope.launchWhenStarted {
                     val dialog = loading(R.string.in_get_fuel)
                     if (checkFusion()) {
                         handler.invoke()