[V2X]优化V2X弹窗在子线程调用的逻辑

This commit is contained in:
renwj
2022-08-03 19:47:55 +08:00
parent 7a59119888
commit e7f57c1cfc
5 changed files with 86 additions and 35 deletions

View File

@@ -100,17 +100,23 @@ object Reminder {
if (key.isEmpty()) {
throw IllegalStateException("reminder: ${reminder.javaClass.name}'s key can't be empty.")
}
if (enqueued.contains(key)) {
return
synchronized(enqueued) {
if (enqueued.contains(key)) {
return
}
enqueued += key
}
enqueued += key
attaches.getOrPut(attachTo) {
mutableListOf()
}.also {
it.add(WeakReference(reminder))
synchronized(attaches) {
attaches.getOrPut(attachTo) {
mutableListOf()
}.also {
it.add(WeakReference(reminder))
}
}
listener?.let {
reminderListeners[reminder] = it
synchronized(reminderListeners) {
listener?.let {
reminderListeners[reminder] = it
}
}
scope.launch {
if (reminder is ActivityReminder) {
@@ -131,11 +137,14 @@ object Reminder {
heap += reminder
dequeueHeap()
} else {
queue += reminder
val pre = findPreShowedReminder()
if (pre != null) {
pre.hide()
queue.clear()
queue += reminder
} else {
queue.clear()
queue += reminder
dequeue()
}
}

View File

@@ -4,7 +4,7 @@ import android.widget.PopupWindow
import androidx.lifecycle.LifecycleOwner
import com.mogo.eagle.core.utilcode.reminder.api.IReminder
abstract class PopupWindowReminder(val popupWindow: PopupWindow): IReminder {
abstract class PopupWindowReminder(open val popupWindow: PopupWindow): IReminder {
override fun lifecycleOwner(): LifecycleOwner = popupWindow.lifecycleOwner