Skip to content

Commit a3de98b

Browse files
committed
feat:Rely on NSLifecycleListener to get exit event
1 parent ceaf9a8 commit a3de98b

1 file changed

Lines changed: 33 additions & 3 deletions

File tree

lifecycletracker/src/iosMain/kotlin/com.multiplatform.lifecyle/LifecycleComposeUIVCDelegate.kt

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,54 @@ package com.multiplatform.lifecyle
33
import androidx.compose.ui.uikit.ComposeUIViewControllerDelegate
44
import com.multiplatform.lifecycle.LifecycleEvent
55
import com.multiplatform.lifecycle.LifecycleTracker
6+
import kotlinx.cinterop.ExperimentalForeignApi
7+
import platform.Foundation.NSNotificationCenter
8+
import platform.Foundation.NSNotificationName
9+
import platform.Foundation.NSSelectorFromString
10+
import platform.UIKit.UIApplicationDidBecomeActiveNotification
11+
import platform.UIKit.UIApplicationDidEnterBackgroundNotification
12+
import platform.UIKit.UIApplicationWillEnterForegroundNotification
13+
import platform.UIKit.UIApplicationWillResignActiveNotification
14+
import platform.UIKit.UIApplicationWillTerminateNotification
615

716
/**
817
* Created By Kevin Zou On 2024/2/22
918
*/
10-
class LifecycleComposeUIVCDelegate(private val lifecycleTracker: LifecycleTracker) : ComposeUIViewControllerDelegate {
19+
class LifecycleComposeUIVCDelegate(private val lifecycleTracker: LifecycleTracker) :
20+
ComposeUIViewControllerDelegate {
21+
22+
private val nsLifecycleListener = NSLifecycleListener(lifecycleTracker)
23+
24+
@OptIn(ExperimentalForeignApi::class)
25+
fun addObserver(name: NSNotificationName, selectorName: String) {
26+
NSNotificationCenter.defaultCenter.addObserver(
27+
nsLifecycleListener,
28+
selector = NSSelectorFromString("$selectorName:"),
29+
name = name,
30+
`object` = null,
31+
)
32+
}
33+
34+
private fun addLifecycleObservers() {
35+
addObserver(UIApplicationWillEnterForegroundNotification, "willEnterForeground")
36+
addObserver(UIApplicationDidBecomeActiveNotification, "didBecomeActive")
37+
addObserver(UIApplicationWillResignActiveNotification, "willResignActive")
38+
addObserver(UIApplicationDidEnterBackgroundNotification, "didEnterBackground")
39+
addObserver(UIApplicationWillTerminateNotification, "willTerminate")
40+
}
41+
1142
override fun viewDidAppear(animated: Boolean) {
1243
super.viewDidAppear(animated)
13-
lifecycleTracker.notifyListeners(LifecycleEvent.OnResumeEvent)
1444
}
1545

1646
override fun viewDidDisappear(animated: Boolean) {
1747
super.viewDidDisappear(animated)
1848
lifecycleTracker.notifyListeners(LifecycleEvent.OnStopEvent)
19-
lifecycleTracker.notifyListeners(LifecycleEvent.OnDestroyEvent)
2049
}
2150

2251
override fun viewDidLoad() {
2352
super.viewDidLoad()
53+
addLifecycleObservers()
2454
lifecycleTracker.notifyListeners(LifecycleEvent.OnCreateEvent)
2555
}
2656

0 commit comments

Comments
 (0)