Skip to content

Commit ab2014d

Browse files
committed
perf: synchronized lastFront
1 parent 1b76ea6 commit ab2014d

File tree

3 files changed

+13
-22
lines changed

3 files changed

+13
-22
lines changed

app/src/main/kotlin/li/songe/gkd/shizuku/ActivityManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ class SafeActivityManager(private val value: IActivityManager) {
5151

5252
fun registerDefault() {
5353
safeInvokeShizuku {
54-
value.registerTaskStackListener(SafeTaskListener.instance)
54+
value.registerTaskStackListener(FixedTaskStackListener)
5555
}
5656
}
5757

5858
fun unregisterDefault() {
5959
safeInvokeShizuku {
60-
value.unregisterTaskStackListener(SafeTaskListener.instance)
60+
value.unregisterTaskStackListener(FixedTaskStackListener)
6161
}
6262
}
6363
}

app/src/main/kotlin/li/songe/gkd/shizuku/ActivityTaskManager.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ import android.content.ContextHidden
66
import android.view.Display
77
import li.songe.gkd.util.AndroidTarget
88

9-
object SafeTaskListener {
10-
val instance by lazy { FixedTaskStackListener() }
11-
}
12-
139
class SafeActivityTaskManager(private val value: IActivityTaskManager) {
1410
companion object {
1511
fun newBinder() = if (AndroidTarget.Q) {
@@ -46,13 +42,13 @@ class SafeActivityTaskManager(private val value: IActivityTaskManager) {
4642

4743
fun registerDefault() {
4844
safeInvokeShizuku {
49-
value.registerTaskStackListener(SafeTaskListener.instance)
45+
value.registerTaskStackListener(FixedTaskStackListener)
5046
}
5147
}
5248

5349
fun unregisterDefault() {
5450
safeInvokeShizuku {
55-
value.unregisterTaskStackListener(SafeTaskListener.instance)
51+
value.unregisterTaskStackListener(FixedTaskStackListener)
5652
}
5753
}
5854
}

app/src/main/kotlin/li/songe/gkd/shizuku/TaskStackListener.kt

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@ import android.app.ActivityManager
44
import android.app.ITaskStackListener
55
import android.content.ComponentName
66
import android.os.Parcel
7-
import kotlinx.atomicfu.atomic
8-
import kotlinx.atomicfu.updateAndGet
97
import li.songe.gkd.a11y.ActivityScene
108
import li.songe.gkd.a11y.updateTopActivity
119

12-
class FixedTaskStackListener : ITaskStackListener.Stub() {
10+
object FixedTaskStackListener : ITaskStackListener.Stub() {
1311

1412
// https://github.com/gkd-kit/gkd/issues/941#issuecomment-2784035441
1513
override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = try {
@@ -20,16 +18,11 @@ class FixedTaskStackListener : ITaskStackListener.Stub() {
2018

2119
override fun onTaskStackChanged() {
2220
val cpn = shizukuContextFlow.value.topCpn() ?: return
23-
if (lastFront.value.first > 0) {
24-
val t = System.currentTimeMillis()
25-
val skip = defaultFront === lastFront.updateAndGet {
26-
if (it.first > 0 && t - it.first < 200 && it.second == cpn) {
27-
defaultFront
28-
} else {
29-
it
30-
}
21+
synchronized(this) {
22+
if (lastFront.first > 0 && lastFront.second == cpn && System.currentTimeMillis() - lastFront.first > 200) {
23+
lastFront = defaultFront
24+
return
3125
}
32-
if (skip) return
3326
}
3427
updateTopActivity(
3528
appId = cpn.packageName,
@@ -39,10 +32,12 @@ class FixedTaskStackListener : ITaskStackListener.Stub() {
3932
}
4033

4134
private val defaultFront = 0L to ComponentName("", "")
42-
private val lastFront = atomic(defaultFront)
35+
private var lastFront = defaultFront
4336
private fun onTaskMovedToFrontCompat(cpn: ComponentName? = null) {
4437
val cpn = cpn ?: shizukuContextFlow.value.topCpn() ?: return
45-
lastFront.value = System.currentTimeMillis() to cpn
38+
synchronized(this) {
39+
lastFront = System.currentTimeMillis() to cpn
40+
}
4641
updateTopActivity(
4742
appId = cpn.packageName,
4843
activityId = cpn.className,

0 commit comments

Comments
 (0)