@@ -25,14 +25,14 @@ public class PythonService extends Service implements Runnable {
25
25
private Thread pythonThread = null ;
26
26
27
27
// Python environment variables
28
- protected String androidPrivate ;
29
- protected String androidArgument ;
30
- protected String pythonName ;
31
- protected String pythonHome ;
32
- protected String pythonPath ;
33
- protected String serviceEntrypoint ;
28
+ private String androidPrivate ;
29
+ private String androidArgument ;
30
+ private String pythonName ;
31
+ private String pythonHome ;
32
+ private String pythonPath ;
33
+ private String serviceEntrypoint ;
34
34
// Argument to pass to Python code,
35
- protected String pythonServiceArgument ;
35
+ private String pythonServiceArgument ;
36
36
37
37
38
38
public static PythonService mService = null ;
@@ -60,36 +60,33 @@ public void onCreate() {
60
60
61
61
@ Override
62
62
public int onStartCommand (Intent intent , int flags , int startId ) {
63
- startIntent = intent ;
64
63
if (pythonThread != null ) {
65
64
Log .v ("python service" , "service exists, do not start again" );
66
65
return startType ();
67
66
}
68
- //when app is closed, OS will restart the service with null intent See #2401
69
- if (intent != null ) {
70
-
71
- Bundle extras = intent .getExtras ();
72
- androidPrivate = extras .getString ("androidPrivate" );
73
- androidArgument = extras .getString ("androidArgument" );
74
- serviceEntrypoint = extras .getString ("serviceEntrypoint" );
75
- pythonName = extras .getString ("pythonName" );
76
- pythonHome = extras .getString ("pythonHome" );
77
- pythonPath = extras .getString ("pythonPath" );
78
- boolean serviceStartAsForeground = false ;
79
- String foreground = extras .getString ("serviceStartAsForeground" );
80
- if (foreground != null ) {
81
- serviceStartAsForeground = foreground .equals ("true" );
82
- }
83
- pythonServiceArgument = extras .getString ("pythonServiceArgument" );
84
- pythonThread = new Thread (this );
85
- pythonThread .start ();
67
+ //intent is null if OS restarts a STICKY service
68
+ if (intent == null ) {
69
+ Context context = getApplicationContext ();
70
+ intent = getThisDefaultIntent (context , "" );
71
+ }
86
72
87
- if (serviceStartAsForeground ) {
88
- doStartForeground (extras );
89
- }
90
- } else {
91
- pythonThread = new Thread (this );
92
- pythonThread .start ();
73
+ startIntent = intent ;
74
+ Bundle extras = intent .getExtras ();
75
+ androidPrivate = extras .getString ("androidPrivate" );
76
+ androidArgument = extras .getString ("androidArgument" );
77
+ serviceEntrypoint = extras .getString ("serviceEntrypoint" );
78
+ pythonName = extras .getString ("pythonName" );
79
+ pythonHome = extras .getString ("pythonHome" );
80
+ pythonPath = extras .getString ("pythonPath" );
81
+ boolean serviceStartAsForeground = (
82
+ extras .getString ("serviceStartAsForeground" ).equals ("true" )
83
+ );
84
+ pythonServiceArgument = extras .getString ("pythonServiceArgument" );
85
+ pythonThread = new Thread (this );
86
+ pythonThread .start ();
87
+
88
+ if (serviceStartAsForeground ) {
89
+ doStartForeground (extras );
93
90
}
94
91
95
92
return startType ();
@@ -99,6 +96,10 @@ protected int getServiceId() {
99
96
return 1 ;
100
97
}
101
98
99
+ protected Intent getThisDefaultIntent (Context ctx , String pythonServiceArgument ) {
100
+ return null ;
101
+ }
102
+
102
103
protected void doStartForeground (Bundle extras ) {
103
104
String serviceTitle = extras .getString ("serviceTitle" );
104
105
String serviceDescription = extras .getString ("serviceDescription" );
@@ -161,7 +162,8 @@ public void onDestroy() {
161
162
@ Override
162
163
public void onTaskRemoved (Intent rootIntent ) {
163
164
super .onTaskRemoved (rootIntent );
164
- if (startType () == START_NOT_STICKY ) {
165
+ //sticky servcie runtime/restart is managed by the OS. leave it running when app is closed
166
+ if (startType () != START_STICKY ) {
165
167
stopSelf ();
166
168
}
167
169
}
0 commit comments