Skip to content

Commit 300c3ec

Browse files
natario1rogerhu
authored andcommitted
Better setup / teardown for JobService (#745)
* Better setup / teardown for JobService * Move to lazy pattern
1 parent 2b7bb5b commit 300c3ec

File tree

1 file changed

+25
-18
lines changed

1 file changed

+25
-18
lines changed

Parse/src/main/java/com/parse/PushServiceApi26.java

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import java.util.ArrayList;
2727
import java.util.List;
28+
import java.util.concurrent.Executor;
2829
import java.util.concurrent.ExecutorService;
2930
import java.util.concurrent.Executors;
3031

@@ -44,7 +45,8 @@ static boolean run(Context context, Intent intent) {
4445
// Execute in the next second.
4546
Bundle extra = new Bundle(1);
4647
extra.putParcelable(INTENT_KEY, intent);
47-
int did = scheduler.schedule(new JobInfo.Builder(JOB_SERVICE_ID, new ComponentName(context, PushServiceApi26.class))
48+
ComponentName component = new ComponentName(context, PushServiceApi26.class);
49+
int did = scheduler.schedule(new JobInfo.Builder(JOB_SERVICE_ID, component)
4850
.setMinimumLatency(1L)
4951
.setOverrideDeadline(1000L)
5052
.setRequiresCharging(false)
@@ -58,19 +60,13 @@ static boolean run(Context context, Intent intent) {
5860
// We delegate the intent to a PushHandler running in a streamlined executor.
5961
private ExecutorService executor;
6062
private PushHandler handler;
63+
private int jobsCount;
6164

6265
// Our manifest file is OK.
6366
static boolean isSupported() {
6467
return true;
6568
}
6669

67-
@Override
68-
public void onCreate() {
69-
super.onCreate();
70-
executor = Executors.newSingleThreadExecutor();
71-
handler = PushServiceUtils.createPushHandler();
72-
}
73-
7470
@Override
7571
public boolean onStartJob(final JobParameters jobParameters) {
7672
if (ParsePlugins.Android.get() == null) {
@@ -85,13 +81,18 @@ public boolean onStartJob(final JobParameters jobParameters) {
8581

8682
final Bundle params = jobParameters.getTransientExtras();
8783
final Intent intent = params.getParcelable(INTENT_KEY);
88-
executor.execute(new Runnable() {
84+
jobsCount++;
85+
getExecutor().execute(new Runnable() {
8986
@Override
9087
public void run() {
9188
try {
92-
handler.handlePush(intent);
89+
getHandler().handlePush(intent);
9390
} finally {
9491
jobFinished(jobParameters, false);
92+
jobsCount--;
93+
if (jobsCount == 0) {
94+
tearDown();
95+
}
9596
}
9697
}
9798
});
@@ -104,13 +105,19 @@ public boolean onStopJob(JobParameters jobParameters) {
104105
return true;
105106
}
106107

107-
@Override
108-
public void onDestroy() {
109-
if (executor != null) {
110-
executor.shutdown();
111-
executor = null;
112-
handler = null;
113-
}
114-
super.onDestroy();
108+
private Executor getExecutor() {
109+
if (executor == null) executor = Executors.newSingleThreadExecutor();
110+
return executor;
111+
}
112+
113+
private PushHandler getHandler() {
114+
if (handler == null) handler = PushServiceUtils.createPushHandler();
115+
return handler;
116+
}
117+
118+
private void tearDown() {
119+
if (executor != null) executor.shutdown();
120+
executor = null;
121+
handler = null;
115122
}
116123
}

0 commit comments

Comments
 (0)