Вы можете сделать пару вещей. 1) отсоедините все компоненты жизненного цикла пользовательского интерфейса, предпочтительно переключите службу на: удаленный процесс, используя манифест. Таким образом, если ваша активность выйдет из строя/будет убита, ваш сервис останется незатронутым, потому что они были на разных процессах. Посмотрите на андроид IPC (простой способ обмена данных между вашей деятельностью и этой услугой, когда на другом процессе, чтобы использовать сокеты на локальном хосте)
<service
android:name="myName.GPS"
android:enabled="true"
android:exported="false"
android:process=":remote">
</service>
2) сделать его обслуживание высокого приоритета переднего плана (это создаст постоянное уведомление)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//retrieve persisted data here
final Intent i = new Intent(this, ClassNameOfService.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
final PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);
final NotificationCompat.Builder note =
new NotificationCompat.Builder(this)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.icon))
.setSmallIcon(R.drawable.icon)
.setContentTitle("GPS Running")
.setOngoing(true)
.setContentIntent(pi);
startForeground(10001, note.build()); //replace 10001 with whatever id you like
return super.onStartCommand(intent, flags, startId);
}
3) ручка onLowMemory, OnDestroy и т.д., изящно, так что вы можете перезапустить службу. Вы можете использовать общие привилегии или создавать базу данных sql для сохранения ваших данных в зависимости от того, что вам подходит. Ваша служба будет убита в какой-то момент. Поэтому лучше иметь стратегию сохранения.
@Override
public void onDestroy() {
//persist your data here
super.onDestroy();
}
эй я думаю, вы должны начать нить в вашу службу, которые работают для бесконечного времени. поэтому из этой парадигмы вы можете добиться того, что ваша служба не будет перезагружаться или не будет закрыта в любое время. просто запустите 1 поток в свою службу и в этом потоке запустите цикл, который запускает бесконечное время и выполняет вашу работу в этом цикле. –