2525
2626import java .util .ArrayList ;
2727import java .util .List ;
28+ import java .util .concurrent .Executor ;
2829import java .util .concurrent .ExecutorService ;
2930import 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