Skip to content

Commit 1f8250e

Browse files
LIBMOBILE-1277- fix androidx lifecycle causes analytics init in background crash (#158)
* LIBMOBILE-1277 - fix androidx lifecycle causes analytics init in background crash * replace handler with main dispatcher --------- Co-authored-by: Wenxi Zeng <[email protected]>
1 parent 12d3560 commit 1f8250e

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

android/src/main/java/com/segment/analytics/kotlin/android/plugins/AndroidLifecyclePlugin.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.segment.analytics.kotlin.android.utilities.DeepLinkUtils
1818
import com.segment.analytics.kotlin.core.Analytics
1919
import com.segment.analytics.kotlin.core.Storage
2020
import com.segment.analytics.kotlin.core.platform.Plugin
21+
import kotlinx.coroutines.Dispatchers
2122
import kotlinx.coroutines.launch
2223
import kotlinx.serialization.json.buildJsonObject
2324
import kotlinx.serialization.json.put
@@ -69,7 +70,14 @@ class AndroidLifecyclePlugin() : Application.ActivityLifecycleCallbacks, Default
6970
application.registerActivityLifecycleCallbacks(this)
7071
if (useLifecycleObserver) {
7172
lifecycle = ProcessLifecycleOwner.get().lifecycle
72-
lifecycle.addObserver(this)
73+
// NOTE: addObserver is required to run on UI thread,
74+
// though we made it compatible to run from background thread,
75+
// there is a chance that lifecycle events get lost if init
76+
// analytics from background (i.e. analytics is init, but
77+
// lifecycle hook is yet to be registered.
78+
runOnMainThread {
79+
lifecycle.addObserver(this)
80+
}
7381
}
7482
}
7583

@@ -260,7 +268,14 @@ class AndroidLifecyclePlugin() : Application.ActivityLifecycleCallbacks, Default
260268
application.unregisterActivityLifecycleCallbacks(this)
261269
if (useLifecycleObserver) {
262270
// only unregister if feature is enabled
263-
lifecycle.removeObserver(this)
271+
runOnMainThread {
272+
lifecycle.removeObserver(this)
273+
}
274+
}
275+
}
276+
private fun runOnMainThread(closure: () -> Unit) {
277+
analytics.analyticsScope.launch(Dispatchers.Main) {
278+
closure()
264279
}
265280
}
266281

0 commit comments

Comments
 (0)