diff --git a/servicing/src/main/java/com/za/service/ServiceManager.kt b/servicing/src/main/java/com/za/service/ServiceManager.kt index bd8186e..afadb36 100644 --- a/servicing/src/main/java/com/za/service/ServiceManager.kt +++ b/servicing/src/main/java/com/za/service/ServiceManager.kt @@ -27,11 +27,13 @@ interface PushListener { fun importantTip(jpushBean : JpushBean) } -data class LastJPushBean(val msg : String, val time : Long = System.currentTimeMillis()) +data class LastJPushBean(val msg : Int, val time : Long = System.nanoTime()) object ServiceManager { private val pushListener = AtomicReference() private var lastJPushBean : LastJPushBean? = null + private const val DUPLICATE_MSG_THRESHOLD = 3000L // 3秒 + // Initialize SharedPreferences fun initialize(context : Context) { @@ -61,22 +63,26 @@ object ServiceManager { } // Handle incoming push messages + @Synchronized fun handlerPushMsg(msg : String) { LogUtil.print("JpushMessage", "Received push message: $msg") + + // 优化后的重复消息判断 + lastJPushBean?.let { + if (System.nanoTime() - it.time < DUPLICATE_MSG_THRESHOLD && it.msg == msg.hashCode()) { + LogUtil.print("MessageHandler", "Duplicate message detected (hash: ${msg})") + return + } + } + if (msg.startsWith("broadcast:")) { + lastJPushBean = LastJPushBean(msg.hashCode()) handleBroadcast(msg) return } try { + lastJPushBean = LastJPushBean(msg.hashCode()) val jpushOrderInfoBean = Gson().fromJson(msg, JpushBean::class.java) - if (lastJPushBean != null && (System.currentTimeMillis() - lastJPushBean !!.time < 3000) && lastJPushBean !!.msg == jpushOrderInfoBean.taskCode) { - LogUtil.print("MessageHandler", "Duplicate message: " + lastJPushBean?.msg) - return - } - - jpushOrderInfoBean?.taskCode?.let { - lastJPushBean = LastJPushBean(it) - } sendSystemNotificationFromMessage(jpushOrderInfoBean) when (jpushOrderInfoBean.pushType) { 0 -> newOrderMsg(jpushOrderInfoBean)