Skip to content

Commit cda6e8c

Browse files
authored
Merge pull request #602 from OneSignal/fix/anrs_callbacks_and_background_app
[Fix] ANRs for callbacks and when backgrounding app
2 parents 4c765d7 + 53a1860 commit cda6e8c

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

OneSignalExample/Assets/OneSignal/CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
### Fixed
9+
- Fixed rare Android ANRs on callbacks firing and also when backgrounding the app.
810
## [3.0.10]
911
### Changed
1012
- Updated included Android SDK to [4.8.5](https://github.com/OneSignal/OneSignal-Android-SDK/releases/tag/4.8.5)

com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
<repositories>
44
<repository>https://repo.maven.apache.org/maven2</repository>
55
</repositories>
6-
<androidPackage spec="com.onesignal:OneSignal:[4.8.5]" />
6+
<androidPackage spec="com.onesignal:OneSignal:[4.8.6]" />
77
</androidPackages>
88
</dependencies>

com.onesignal.unity.android/Runtime/OneSignalAndroid.cs

100755100644
+15
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ public override void SetLaunchURLsInApp(bool launchInApp)
111111
=> SDKDebug.Warn("This feature is only available for iOS.");
112112

113113
public override void Initialize(string appId) {
114+
SetOneSignalCallbacksToBackgroundThread();
115+
114116
var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
115117
var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
116118

@@ -137,6 +139,19 @@ public override void Initialize(string appId) {
137139
_completedInit(appId);
138140
}
139141

142+
// Change all OneSignal callbacks, observers, and events to fire on a background thread.
143+
// This prevents cases where the main thread could hang waiting on Unity to bridge from Java back to C#.
144+
private void SetOneSignalCallbacksToBackgroundThread() {
145+
var callbackThreadManagerStr = SDKPackage + "." + "CallbackThreadManager";
146+
var callbackThreadManagerClass = new AndroidJavaClass(callbackThreadManagerStr);
147+
var callbackThreadManagerCompanionClass = callbackThreadManagerClass.GetStatic<AndroidJavaObject>("Companion");
148+
149+
var useThreadClass = new AndroidJavaClass(callbackThreadManagerStr + "$UseThread");
150+
var useThreadBackgroundEnumValue = useThreadClass.GetStatic<AndroidJavaObject>("Background");
151+
152+
callbackThreadManagerCompanionClass.Call("setPreference", useThreadBackgroundEnumValue);
153+
}
154+
140155
public override async Task<NotificationPermission> PromptForPushNotificationsWithUserResponse() {
141156
var proxy = new PromptForPushNotificationPermissionResponseHandler();
142157
_sdkClass.CallStatic("promptForPushNotifications", true, proxy);

0 commit comments

Comments
 (0)