Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid - Multiple services don't run as expected
    text
    copied!<p>I have this service:</p> <pre><code>public class AAAService extends Service { private Intent requestService; private Intent calendarService; private SharedPreferences servicePreferences; private static final String REQUEST_DELAY = "request_interval"; private static final int REQUEST_DELAY_DEFAULT = 900000; private static final String SERVICE = "service"; private static final String SOUND = "sound"; private static final String VIBRATE = "vibrate"; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate(){ super.onCreate(); Log.i("daim", "AAAService has started ..."); requestService = new Intent(this, RequestService.class); calendarService = new Intent(this, CalendarService.class); servicePreferences = getSharedPreferences(SERVICE, MODE_PRIVATE); long delay = Long.valueOf(servicePreferences.getInt(REQUEST_DELAY, REQUEST_DELAY_DEFAULT)); if(delay &gt; 0){ startRequestService(); } startCalendarService(); } @Override public void onDestroy(){ super.onDestroy(); Log.i("daim", "AAAService has stopped ..."); stopRequestService(); stopCalendarService(); } public void startRequestService(){ startService(requestService); } public void stopRequestService(){ stopService(requestService); } public void startCalendarService(){ startService(calendarService); } public void stopCalendarService(){ stopService(calendarService); } </code></pre> <p>}</p> <p>And this two other Services:</p> <pre><code>public class RequestService extends AAAService public class CalendarService extends AAAService </code></pre> <p>Both these has onCreate and onDestroy method, in order to start and stop the service. The problem I'm facing here, is that when I start my AAAService from the an Activity it gets started, and yes it starts the other two services, but right after that it get stopped (onDestroy method), and I don't know why! This is what I do from my Activity: </p> <pre><code>Intent service = new Intent(this, AAAService.class); startService(service); </code></pre> <p>Any help is appreciated! Thanks.</p> <p>My two other services:</p> <pre><code>public class CalendarService extends AAAService{ private CalendarApi calendarApi; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { super.onCreate(); Log.i("daim", "CalendarService has started ..."); calendarApi = AAALifestyleApplication.calendarApi; startService(); } @Override public void onDestroy() { super.onDestroy(); Log.e("daim", "CalendarService has stopped ..."); } public void startService(){ Log.d("daim", "UPDATING EVENTS FROM CALENDAR SERVICE!!!"); ArrayList&lt;Long&gt; dates = new ArrayList&lt;Long&gt;(); dates.add(0L); dates.add(System.currentTimeMillis() * 2); calendarApi.getEventsFromDrupal(dates, this, null); stopSelf(); } </code></pre> <p>}</p> <pre><code>public class RequestService extends AAAService implements RequestListener{ private Timer timer; private CommonApi commonApi; private NotificationManager nManager; private Notification notification; private PendingIntent pIntent; private Intent intent; private Context context; private SharedPreferences sharedPref; private long delay; private boolean sound, vibrate; private static final int INTERVAL_DEFAULT = 900000; private static final String SERVICE_NAME = "service"; private static final String INTERVAL_KEY = "request_interval"; private static final String SOUND = "sound"; private static final String VIBRATE = "vibrate"; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { super.onCreate(); Log.i("daim", "RequestService has started ..."); sharedPref = getSharedPreferences(SERVICE_NAME, MODE_PRIVATE); startService(); } @Override public void onDestroy() { super.onDestroy(); Log.e("daim", "RequestService has stopped ..."); if(timer != null){ timer.cancel(); } } public void startService(){ Log.d("daim", "UPDATING REQUESTS FROM REQUEST SERVICE!!!"); int intervalInteger = sharedPref.getInt(INTERVAL_KEY, INTERVAL_DEFAULT); delay = Long.valueOf(intervalInteger); sound = sharedPref.getBoolean(SOUND, true); vibrate = sharedPref.getBoolean(VIBRATE, true); Log.d("daim", "sound: " + sound); Log.d("daim", "vibrate: " + vibrate); Log.d("daim", "delay: " + delay); commonApi = AAALifestyleApplication.commonApi; timer = new Timer(); if(delay &gt; 0){ timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { if(commonApi.isLoggedIn()){ commonApi.getRequests(RequestService.this, false); } } }, 0, delay); } } @Override public void onRequestResult(ArrayList&lt;Request&gt; requests) { for(Request r : requests){ if(!commonApi.hasRequest(r)){ sendNotification(); } } } @Override public void onAuthenticationError() { // TODO Auto-generated method stub } @Override public void onConnectionError() { // TODO Auto-generated method stub } private void sendNotification(){ context = getApplicationContext(); nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notification = new Notification(R.drawable.icon, "You received new requests", System.currentTimeMillis()); intent = new Intent(getBaseContext(), RequestsActivity.class); pIntent = PendingIntent.getActivity(getBaseContext(), 0, intent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK); notification.setLatestEventInfo(context, "Request notification", "Click here to see your requests", pIntent); notification.flags |= Notification.FLAG_AUTO_CANCEL; if(vibrate){ notification.defaults |= Notification.DEFAULT_VIBRATE; } if(sound){ notification.defaults |= Notification.DEFAULT_SOUND; } nManager.notify(0, notification); } </code></pre> <p>}</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload