Skip to content

Commit 0a21c1f

Browse files
committed
Fix memory leak under service on SyncRunnable
* Service reference was preventing it from being destroyed * Refactor service reference into a WeakReference
1 parent 6881f70 commit 0a21c1f

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/OSSyncService.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
import androidx.annotation.RequiresApi;
3737

38+
import java.lang.ref.WeakReference;
3839
import java.util.concurrent.ArrayBlockingQueue;
3940
import java.util.concurrent.BlockingQueue;
4041

@@ -194,11 +195,11 @@ public void onComplete(LocationController.LocationPoint point) {
194195
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
195196
static class LollipopSyncRunnable extends SyncRunnable {
196197

197-
private JobService jobService;
198+
private WeakReference<JobService> jobService;
198199
private JobParameters jobParameters;
199200

200-
LollipopSyncRunnable(JobService caller, JobParameters jobParameters) {
201-
this.jobService = caller;
201+
LollipopSyncRunnable(JobService service, JobParameters jobParameters) {
202+
this.jobService = new WeakReference<>(service);
202203
this.jobParameters = jobParameters;
203204
}
204205

@@ -208,7 +209,9 @@ protected void stopSync() {
208209
// Reschedule if needed
209210
boolean reschedule = OSSyncService.getInstance().needsJobReschedule;
210211
OSSyncService.getInstance().needsJobReschedule = false;
211-
jobService.jobFinished(jobParameters, reschedule);
212+
213+
if (jobService.get() != null)
214+
jobService.get().jobFinished(jobParameters, reschedule);
212215
}
213216
}
214217

@@ -217,16 +220,17 @@ protected void stopSync() {
217220
* calls Service#stopSelf during stopSync()
218221
*/
219222
static class LegacySyncRunnable extends SyncRunnable {
220-
Service callerService;
223+
private WeakReference<Service> callerService;
221224

222-
LegacySyncRunnable(Service caller) {
223-
callerService = caller;
225+
LegacySyncRunnable(Service service) {
226+
callerService = new WeakReference<>(service);
224227
}
225228

226229
@Override
227230
protected void stopSync() {
228231
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "LegacySyncRunnable:Stopped");
229-
callerService.stopSelf();
232+
if (callerService.get() != null)
233+
callerService.get().stopSelf();
230234
}
231235
}
232236
}

0 commit comments

Comments
 (0)