Как понизить vscode

Во-первых, вам нужно выяснить, сколько видов услуг в Android. AFAIK, есть:

  • Служба переднего плана.
  • Фоновая служба.
  • Связанная служба.
  • Intent service.

Эти службы останавливаются по-разному.

  • Foreground: останавливайтесь, когда вы намеренно останавливаете его, вызывая stopService() в действии или фрагменте, где вы запускаете эту службу, или позвоните stopItself() в свою собственную службу. И обратите внимание только на этот метод триггера службы onDestroy().
  • Фон: stopService() и stopItself() делают так же, как и переднего плана. Кроме того, вы должны знать, что эта служба находится в том же потоке с активностью или фрагментом, вызывающим ее, поэтому, если вы уничтожаете активность или фрагмент, эта служба также остановится, но без вызова onDestroy(). Это в основном разрушает подполье. Таким образом, если вы хотите поймать, когда эта остановка службы, вам нужно добавить android:stopWithTask="false" при объявлении службы в файле манифеста следующим образом:
    <application>
        //....
        <service android:name=".services.catchingStopService" 
             android:stopWithTask="false" /> 
        //....
    </application>
    
    И теперь в вашем классе обслуживания вы можете переопределить этот метод, который срабатывает, когда эта служба перестает:
    @Override 
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent); 
        // Your job when the service stops. 
    }
    
  • Bound: вам нужно обрабатывать себя через bindService() и unbindService(), вы обнаружите, что он полностью совпадает с starService() и stopService()
  • Цель: этот тип обслуживания останавливается сам по себе, когда он заканчивает работу. И вы можете использовать ResultReceiver для связи между сервисом и активностью или фрагментом. Это похоже на BroadcastReceiver. Вы можете легко искать пример в Google.

Подвести итоги: основываясь на цели, выберите тип обслуживания, который вам удовлетворит. И все они согласны с:

  • Не рассчитывайте onDestroy () знать, когда сервис прекращается, потому что иногда его называют под землей; более точно, onDestroy вызывает, когда stopService () или stopItSelf () вызывает (BoundService работает так же, как мне кажется, но с помощью аналогичного метода, возможно, unBind (), я еще не тестировал).
  • Использовать атрибут android: stopWithTask = "false", а не знать, когда служба действительно останавливается.
  • Все виды обслуживания прекращаются, когда выключение устройства или ОС убивает его, если утечка памяти в памяти.
  • Вы также должны взглянуть на возврат флага на onStartCommand(), чтобы иметь возможность справиться с тем, когда службы перестают работать как перезапуск или что-то еще. Вот несколько ключевых слов, которые вы можете найти: START_STICKY <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.ACTION_SHUTDOWN" /> <actionandroid:name="android.intent.action.QUICKBOOT_POWEROFF" />
34
задан tru7 18 March 2018 в 10:16
поделиться