Служба Android должна работать всегда (никогда не останавливать или останавливать)

Я создал службу и хочу запускать эту службу всегда, пока мой телефон не перезапустится или не закроется. Служба должна работать в фоновом режиме.

Пример кода созданных сервисов и сервисов запуска:

Запустите службу:

Intent service = new Intent(getApplicationContext(), MyService.class); getApplicationContext().startService(service); 

Обслуживание:

 public class MyService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO do something useful HFLAG = true; //smsHandler.sendEmptyMessageDelayed(DISPLAY_DATA, 1000); return Service.START_NOT_STICKY; } @Override public IBinder onBind(Intent intent) { // TODO for communication return IBinder implementation return null; } } 

Декларация манифеста:

 <service android:name=".MyService" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > </service> 

Можно ли запускать эту службу всегда, когда приложение приостанавливается и что-то еще. Через некоторое время мое приложение переходит в режим паузы, и службы также останавливаются или останавливаются. Итак, как я могу запустить эту службу в фоновом режиме и всегда.

Solutions Collecting From Web of "Служба Android должна работать всегда (никогда не останавливать или останавливать)"

«Можно ли всегда запускать эту службу, как когда приложение приостанавливается и что-то еще?»

Да.

  1. В сервисе onStartCommand метод возвращает START_STICKY.

     public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } 
  2. Запустите службу в фоновом режиме, используя startService (MyService), чтобы он всегда оставался активным независимо от количества связанных клиентов.

     Intent intent = new Intent(this, PowerMeterService.class); startService(intent); 
  3. Создайте связующее.

     public class MyBinder extends Binder { public MyService getService() { return MyService.this; } } 
  4. Определите соединение службы.

     private ServiceConnection m_serviceConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { m_service = ((MyService.MyBinder)service).getService(); } public void onServiceDisconnected(ComponentName className) { m_service = null; } }; 
  5. Привяжите к службе с помощью bindService.

      Intent intent = new Intent(this, MyService.class); bindService(intent, m_serviceConnection, BIND_AUTO_CREATE); 
  6. Для вашего обслуживания вам может потребоваться уведомление о запуске соответствующей деятельности после ее закрытия.

     private void addNotification() { // create the notification Notification.Builder m_notificationBuilder = new Notification.Builder(this) .setContentTitle(getText(R.string.service_name)) .setContentText(getResources().getText(R.string.service_status_monitor)) .setSmallIcon(R.drawable.notification_small_icon); // create the pending intent and add to the notification Intent intent = new Intent(this, MyService.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); m_notificationBuilder.setContentIntent(pendingIntent); // send the notification m_notificationManager.notify(NOTIFICATION_ID, m_notificationBuilder.build()); } 
  7. Вам нужно изменить манифест, чтобы запустить действие в режиме одного верхнего уровня.

      android:launchMode="singleTop" 
  8. Обратите внимание, что если системе нужны ресурсы, и ваш сервис не очень активен, он может быть убит. Если это неприемлемо, принесите сервис на передний план, используя startForeground.

      startForeground(NOTIFICATION_ID, m_notificationBuilder.build()); 

Чтобы запустить службу в своем собственном процессе, вы должны указать следующее в объявлении xml.

 <service android:name="WordService" android:process=":my_process" android:icon="@drawable/icon" android:label="@string/service_name" > </service> 

Здесь вы можете найти хороший учебник, который был действительно полезен для меня

http://www.vogella.com/articles/AndroidServices/article.html

Надеюсь это поможет

Вы можете реализовать startForeground для службы, и даже если она умрет, вы можете перезапустить ее, используя START_STICKY в startCommand() . Не уверен, хотя это правильная реализация.

Простым решением является перезапуск службы, когда система ее останавливает.

Я нашел эту очень простую реализацию этого метода:

Как отключить службу Android

Если у вас уже есть служба и вы хотите, чтобы она работала все время, вам нужно добавить 2 вещи:

  1. В самом сервисе:

     public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } 
  2. В манифесте:

     android:launchMode="singleTop" 

Не нужно добавлять привязку, если она вам не нужна.

Я нашел простой и понятный способ поддерживать Service всегда.

Этот парень объяснил это так ясно и использовал хороший алгоритм. Его подход заключается в отправке широковещательной передачи, когда служба собирается убить, а затем использовать ее для перезапуска службы.

Вы должны проверить это: http://fabcirablog.weebly.com/blog/creating-a-never-ending-background-service-in-android